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
一 我的最优解
验证是否回文
1 、忽略大小写、空格和标点等:用replace和正则转化成只有小写字符
使用正则模块re,匹配 \W, 替换成 ''
2 、使用切片s[::-1] reverse字符串
class Solution:
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = s.lower().replace(' ','')
s = re.sub(r'[\W]','',s)
if(s == s[::-1]): return True
return False
Runtime: 52 ms, faster than 99.16% of Python3
二 discussion里看到的
分析:和我的代码含义上是一样的,我的前两行是下面的第一行,后两行是下面的第二行。
使用listcomp生成新list,str自带的方法isalnum()检测字符串是否由字母和数字组成
def isPalindrome(self, s):
lst = [char.lower() for char in s if char.isalnum()]
return lst == lst[::-1]