Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama" Output: true
Example 2:
Input: "race a car" Output: false
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ if s is '': return True import string valid = set(string.ascii_letters + string.digits) s_cp = s[:].lower() left, right = 0, len(s) - 1 while left <= right: if s_cp[left] not in valid: left += 1 elif s_cp[right] not in valid: right -= 1 elif s_cp[left] != s_cp[right]: return False else: left += 1 right -= 1 return True
class Solution { public boolean isPalindrome(String s) { if (s.length() == 0) { return true; } char[] charArr = s.toCharArray(); int left = 0, right = s.length() - 1; while (left < right) { if (!Character.isLetterOrDigit(charArr[left])) { left += 1; } else if (!Character.isLetterOrDigit(charArr[right])) { right -= 1; } else if (Character.toUpperCase(charArr[left]) != Character.toUpperCase(charArr[right])) { return false; } else { left += 1; right -= 1; } } return true; } }