LeetCode-125. 验证回文串

题目来源

125. 验证回文串

题目详情

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明: 本题中,我们将空字符串定义为有效的回文串。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 2 * 105
  • 字符串 s 由 ASCII 字符组成

题解分析

解法一:双指针法

  1. 本题是需要判断回文串,一看到回文,我们就应该联想到双指针法,因为回文的特点就是头尾字符对应的,也因此可以考虑使用首尾指针来求解。
  2. 但是,本题有一个特点就是,这里并不是所有字符都是有效的,有一些字符是不必要考虑的,所以,在遍历的过程中,需要跳过这些不合法的字符,而只比较合法的字符。
class Solution {
    public boolean isPalindrome(String s) {
        s = s.trim();
        int n = s.length();
        s = s.toLowerCase();
        int left = 0, right = n-1;
        while(left <= right){
            char chl = s.charAt(left);
            char chr = s.charAt(right);
            if(Character.isLetterOrDigit(chl) && Character.isLetterOrDigit(chr)){
                if(chl != chr){
                    return false;
                }
                left++;
                right--;
            }
            if(!Character.isLetterOrDigit(chl)){
                left++;
            }
            if(!Character.isLetterOrDigit(chr)){
                right--;
            }
        }
        return true;
    }
}
posted @ 2022-04-01 16:23  Garrett_Wale  阅读(103)  评论(0编辑  收藏  举报