125. Valid Palindrome
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:
 trueExample 2:
Input:
 "race a car"
Output:
 falseThoughts:
- Lower-case the string and have two pointers starting from first and last to check the legit characters until two pointers cross each other over 
Code: Two pointers explicit
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lower()
        i , j = 0, len(s) - 1
        while i <= j:
            while i < j and not s[i].isalnum(): # must be i < j in order to prevent index out of range. e.g ".,"
                i +=1
            while i < j and not s[j].isalnum(): # must be i < j in order to prevent index out of range. e.g ".,"
                j -= 1
            if s[i] != s[j]: return False 
            i+= 1;  j -= 1
        return TrueCode: Two pointers implicit (by comparing the reverse of the string itself)
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = ''.join(e for e in s if e.isalnum()).lower()
        return s == s[::-1]Last updated
Was this helpful?