Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama"
Output: true
Example 2:
Input: "race a car"
Output: false
Constraints:
s consists only of printable ASCII characters.
Solution:
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.isEmpty()) {
return true;
}
int left = 0;
int right = s.length() - 1;
while (left <= right) {
char l = s.charAt(left);
if (!Character.isLetterOrDigit(l)) {
left ++;
continue;
}
char r = s.charAt(right);
if (!Character.isLetterOrDigit(r)) {
right --;
continue;
}
if (Character.toLowerCase(l) != Character.toLowerCase(r)) return false;
left ++;
right --;
}
return true;
}
}