力扣(LeetCode)验证回文串 个人题解

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

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

示例 1:

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

示例 2:

输入: "race a car"
输出: false

这题是验证回文串的一个变种,因为里面有干扰的字符串存在,不能直接判断,不过也很好解决,直接添加过滤的语句,遇到不是数字且不是字母的直接跳过,只有两边都是合法的,才进行比较。

特别注意题意,要求忽略字母的大小写。

代码如下:

class Solution {
    public boolean isPalindrome(String s) {
        int left = 0, right = s.length() - 1;
        char ch1, ch2;
        while (left < right) {
            if (Character.isLetter(s.charAt(left)) || Character.isDigit(s.charAt(left))) {
                ch1 = s.charAt(left);
            } else {
                left++;
                continue;
            }
            if (Character.isLetter(s.charAt(right)) || Character.isDigit(s.charAt(right))) {
                ch2 = s.charAt(right);
            } else {
                right--;
                continue;
            }
            if (Character.toLowerCase(ch1) == Character.toLowerCase(ch2)) {
                left++;
                right--;
            }
            else
                return false;
        }
        return true;
    }
}
原文地址:https://www.cnblogs.com/axiangcoding/p/10409957.html