ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Leetcode Algorithm-125. 验证回文串

2021-09-27 20:06:58  阅读:205  来源: 互联网

标签:return Algorithm 示例 125 字符串 sb true Leetcode 回文


前言

闲来无事刷题玩,顺带记录一下解题思路,方便未来二刷的时候来找思路。

题目

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。

示例 :

示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true
解释:"amanaplanacanalpanama" 是回文串

示例 2: 输入: "race a car" 输出: false
解释:"raceacar" 不是回文串

思路

综合题目和示例解释看很容分析,就是把给定的字符串中的所有字母拆出来小写然后组成一个字符串,然后判断字符串是不是回文串。那么题目就分为两部分:1. 拆解字符串s;2. 是否是回文。

  • 对于1,可以采取首先小写整个字符串,然后用ASCII码过滤的方式把所有字母取出来。
  • 对于2,可用自带的reverse()方法去判断回文,也可以用折半双指针法判断是否是回文。

注:本题有一个很奇怪的现象,不清楚是不是Leetcode官网的编译器的bug,笔者对一下两个方法进行提交的时候都会卡在"OP"这个测试用例上。Leetcode的测试会提示输出为true,但是根据笔者自己在编译器上运行的结果来看测试用例"OP"并没有特殊表现,正常输出false

Java自带的反转方法

public static boolean isPalindrome(String s) {
    if (s.equals("")||s.length()==0) return true;
    s=s.toLowerCase(); //转小写
    StringBuilder sb=new StringBuilder();
    //提取字母
    for (int i = 0; i <s.length(); i++) {
        if (65 <=s.charAt(i) && s.charAt(i) <=90 || 97 <=s.charAt(i) && s.charAt(i) <=122){
            sb.append(s.charAt(i));
        }
    }
    //直接判断
    return sb.toString().equals(sb.reverse().toString());
}

双指针法

public static boolean isPalindrome(String s) {
    s=s.toLowerCase(); //转小写
    StringBuilder sb=new StringBuilder();
    //提取字母
    for (int i = 0; i <s.length(); i++) {
        if (65 <=s.charAt(i) && s.charAt(i) <=90 || 97 <=s.charAt(i) && s.charAt(i) <=122){
            sb.append(s.toLowerCase().charAt(i));
        }
    }
    //回文反转
    return helper(sb.toString());
}

public static boolean helper(String s){
    if (s.equals("")||s.length()==0) return true;
    //i是头指针,j是尾指针,如果i和j都没有到中间位置,继续循环。
    // 如果相等则跳出循环,整个字符串判断完毕,期间只要发现一对不相等的字符,即可判断为非回文。
    for (int i = 0, j=s.length()-1; i <= s.length()/2 && j>=s.length()/2; i++, j--) {
        if (s.charAt(i)!=s.charAt(j))
            return false;
    }
    return true;
}

标签:return,Algorithm,示例,125,字符串,sb,true,Leetcode,回文
来源: https://blog.csdn.net/Smallc0de/article/details/120515887

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有