Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
从这个题的描述中,我们可以看出,它和一般的验证回文字符串不同的地方在于1. 只有字符和数字有效
2. 忽略大小写
所以我们只需要做两件事就可以了
1. 全部转成小写
2. 判断每个字符是否有效
代码如下
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0)
return true;
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (!isValid(s.charAt(left))) {
left++;
continue;
}
if (!isValid(s.charAt(right))) {
right--;
continue;
}
if (s.charAt(left) != s.charAt(right))
return false;
left++;
right--;
}
return true;
}
public boolean isValid(char ch) {
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' || ch >= '0'
&& ch <= '9')
return true;
return false;
}