LeetCode 125.验证回文串

147 阅读1分钟

一、题目详情

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

示例:

输入: "A man, a plan, a canal: Panama"
输出: true

二、思路

对于字符串 s,首先我们将它处理一下,剔除其他字符,只保留字母和数字字符,得到字符串 str。
接下来,我们有两种解法:

  1. 将 str 进行反转,再看它与 str 是否相等,相等就是回文串。
  2. 定义两个指针,分别指向字符串 str 的开头和结尾,依次比较字符。如果有一对字符不匹配,那么就不是回文串。 这里我们采用第二种解法。

三、代码

public boolean isPalindrome2(String s) {
    //获取所有的数字和字母字符
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<s.length();i++) {
        if(Character.isLetterOrDigit(s.charAt(i))) {
            //将字母字符转化为小写加入sb中
            sb.append(Character.toLowerCase(s.charAt(i)));
        }
    }
    int left=0,right=sb.length()-1;
    while(left<right) {
        //如果左右俩字符比较不一致,直接false
        if(sb.charAt(left)!=sb.charAt(right)) {
            return false;
        }
        //如果一致就继续比较
        left++;
        right--;
    }
    //之前比较的左右字符都相同,全部都比较完了
    return true;
}

qrcode2.png