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]", "")?