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
02-12 10:09