class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right && !isValid(s.charAt(left))) {
left++;
}
while (left < right && !isValid(s.charAt(right))) {
right--;
}
if (left < right && !isEqual(s.charAt(left), s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
private boolean isValid(char c) {
return Character.isLetterOrDigit(c);
}
private boolean isEqual(char a, char b) {
return Character.toLowerCase(a) == Character.toLowerCase(b);
}
}