题目:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解答:


思路:字符串去掉标点和空格后反转,反转前与反转后相同。

方法一:

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import string
        from copy import deepcopy
        enstr = string.ascii_lowercase + string.digits
        a = [i for i in s.lower() if i in enstr]
        b = deepcopy(a)
        a.reverse()
        return a == b

方法二:使用string的内置函数isdigit()和isalpha()。

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        res=[]
        for x in s:
            if x.isdigit():
                res.append(x)
            elif x.isalpha():
                res.append(x.lower())
        return res==res[::-1]

方法三:使用string的内置函数isalnum()。

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = ''.join(filter(str.isalnum,s)).lower()
        return s==s[::-1]

方法四:使用正则匹配。

class Solution:
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
import re
s = ''.join(re.findall(r"[0-9a-zA-Z]", s)).lower()
return s == s[::-1]

方法五:使用正则匹配。 

import re
class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = re.sub("[^A-Za-z0-9]+", "", s).lower()
        return s == s[::-1]

  

02-15 14:48