leetcode125:验证回文串

思想:首先去除字符串里面所有的空格和标点符号。当所有的空格和标点去除后,将字符串所有字母变成小写。最后取出后面一半字符串并逆序再和前面一半字符比较是否相等。

import re
class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        string = re.sub("[._,?;$%^*(+: --`@]", "", s).lower()
        backs = string[(len(string)+1)//2:][::-1]
        fronts = string[0:len(string)//2]
        return backs == fronts
        

但是测试案例中有多少种标点符号我们是不知道的,我都是放进leetcode运行,出错了再将相应标点加进正则中。这个的方法的局限性就在这里

下面附上大佬的思想(其实我也想到这个啦)

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        start, end = 0, len(s) - 1
        while start < end:
            if not s[start].isalnum():
                start += 1
                continue
            if not s[end].isalnum():
                end -= 1
                continue
            if s[start].lower() != s[end].lower():
                return False
            start += 1
            end -= 1
        return True

猜你喜欢

转载自blog.csdn.net/weixin_43160613/article/details/83111436