Valid Palindrome
Problem
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
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.
重点是.toLowerCase()
和Character.isLetterOrDigit()
两个函数的使用;
以及指针在标点情况下移动后的continue
语句。
Challenge
O(n) time without extra memory. ----> 指针嘛。
Solution
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() < 2) {
return true;
}
s = s.toLowerCase();
int start = 0, end = s.length() - 1;
while (start < end) {
if (!Character.isLetterOrDigit(s.charAt(start))) {
start++;
continue;
}
if (!Character.isLetterOrDigit(s.charAt(end))) {
end--;
continue;
}
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}