Problem Definition:
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: Using regular expression.
1 def isPalindrome(self, s): 2 p=re.compile('w') 3 arr=p.findall(s) 4 n=len(arr)/2 5 for i in range(n): 6 if arr[i].upper()!=arr[n-1-i].upper(): 7 return False 8 return True
Solution 2: A simpler way of using regular expression.
1 def isPalindrome(self, s): 2 s = re.sub("[^A-Za-z0-9]", "", s).lower() #可以换成'W' 3 return s == s[::-1]
Solution 3: Just traverse the string.
1 def isPalindrome(s): 2 s1 = ''.join(ch for ch in s if ch.isalnum()).lower() 3 return s1 == s1[::-1]