class Solution: def isPalindrome(self, s: str) -> bool: import re from string import punctuation add_punc="' '" all_punc=add_punc+punctuation b=''.join(i for i in s if i not in all_punc) c=b.lower() if c=='' or len(c)==1: return True if len(c)==2: return c[0]==c[1] if len(c)%2==1:#长度是奇数 return list(c[:len(c)//2])==list(reversed(c[len(c)//2+1:])) else: return list(c[:len(c)//2])==list(reversed(c[len(c)//2:]))
执行用时 :56 ms, 在所有 Python3 提交中击败了93.35%的用户
内存消耗 :14.3 MB, 在所有 Python3 提交中击败了29.68%的用户
用到了字符串的连接方式:
b=''.join(i for i in s if i not in all_punc)
用到了
from string import punctuation
add_punc="' '"
all_punc=add_punc+punctuation
别人28ms的范例:
class Solution: def isPalindrome(self, s: str) -> bool: if not s: return True s = s.lower() s = re.sub(r'\W+', '', s) return s == s[::-1]
这里面用到了:
s = re.sub(r'\W+', '', s)
其中
re.sub用于实现正则的替换
\W+ 匹配非字母数字及下划线。,
除此之外,人家直接返回
s == s[::-1]
比我的做法要简洁的多。
改正如下:
class Solution: def isPalindrome(self, s: str) -> bool: import re from string import punctuation add_punc="' '" all_punc=add_punc+punctuation b=''.join(i for i in s if i not in all_punc) c=b.lower() if c=='' : return True else: return c==c[::-1]
执行用时 :48 ms, 在所有 Python3 提交中击败了98.64%的用户
内存消耗 :14.4 MB, 在所有 Python3 提交中击败了26.78%的用户
正则表达式牛逼!!!!
——2019.10.9