给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
解题思路,采用左右指针解决,代码如下
private static boolean isPalindrome(String s) {
if(s== null || s.equals("")) return true;
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right && !isAlphanum(s.charAt(left))) {
left++;
}
while (left < right && !isAlphanum(s.charAt(right))) {
right--;
}
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
private static boolean isAlphanum(char c) {
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9');
}