Valid Palindrome

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,

"A man, a plan, a canal: Panama" is a palindrome.

"race a car" is not a palindrome.

Note:

Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

Solution:

  1. public class Solution {
  2. public boolean isPalindrome(String s) {
  3. if (s == null) return false;
  4. s = s.toLowerCase();
  5. int n = s.length(), i = 0, j = n - 1;
  6. char[] chars = s.toCharArray();
  7. while (i < j) {
  8. // skip any non-alphanumeric chars
  9. while (i < n && !Character.isLetterOrDigit(chars[i])) { i++; }
  10. while (j >= 0 && !Character.isLetterOrDigit(chars[j])) { j--; }
  11. if (i < j && chars[i++] != chars[j--]) {
  12. return false;
  13. }
  14. }
  15. return true;
  16. }
  17. }