Valid Palindrome

Solution: two pointers.

It is pretty similar to the strategy used to determine a valid number.

public boolean isPalindrome(String s) {
    if (s == null || s.length() == 0) return true;
    int i = 0, j = s.length() - 1;
    int n = s.length();

    while (i < j) {
        while (i < j && !Character.isLetterOrDigit(s.charAt(i))) i++;
        while (i < j && !Character.isLetterOrDigit(s.charAt(j))) j--;

        if (Character.toLowerCase(s.charAt(i)) 
            != Character.toLowerCase(s.charAt(j))) {
                return false;
        }
        i++; j--;
    }
    return true;
}