给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
本题中,将空字符串定义为有效的 回文串 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
示例 2:
输入: s = “race a car”
输出: false
解释:“raceacar” 不是回文串
提示:
1 <= s.length <= 2 * 10^5
字符串 s 由 ASCII 字符组成
java代码:
class Solution {
public boolean isPalindrome(String s) {
int l = 0, r = s.length() - 1;
while (l < r) {
while (l < r && !check(s.charAt(l))) l++;
while (l < r && !check(s.charAt(r))) r--;
if (l < r && !isEquals(s.charAt(l), s.charAt(r))) return false;
l++;
r--;
}
return true;
}
public boolean check(char c) { //检测字符c是否为数字或字母
return 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9';
}
public boolean isEquals(char a, char b) { //忽略大小写比较两个字符
if ('A' <= a && a <= 'Z') a = (char)(a + 32);
if ('A' <= b && b <= 'Z') b = (char)(b + 32);
return a == b;
}
}