Q2: How do you check if a String is a Palindrome (ignoring non-alphanumeric characters)?

Use two pointers (left at index 0, right at index len - 1). Increment left and decrement right past non-alphanumeric characters (Character.isLetterOrDigit), and compare lowercased characters.

Valid Palindrome Solution
public class ValidPalindrome {
    public static boolean isPalindrome(String s) {
        if (s == null) return false;
        int left = 0, right = s.length() - 1;
        while (left < right) {
            while (left < right && !Character.isLetterOrDigit(s.charAt(left))) left++;
            while (left < right && !Character.isLetterOrDigit(s.charAt(right))) right--;
            if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
💡 Skips special characters on the fly to check palindrome properties efficiently.
Key Takeaways
  • Filter non-alphanumeric characters dynamically using Character.isLetterOrDigit().
  • Runs in $O(n)$ time with $O(1)$ auxiliary space.
Knowledge Check

Why is scanning inward with Character.isLetterOrDigit preferred over s.replaceAll("[^a-zA-Z0-9]", "")?