美文网首页
32验证回文串

32验证回文串

作者: Jachin111 | 来源:发表于2020-08-12 12:47 被阅读0次

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
    说明:本题中,我们将空字符串定义为有效的回文串。

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

    示例 2:
    输入: "race a car"
    输出: false

    双指针法

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            left, right = 0, len(s) - 1
            case = abs(ord('a') - ord('A'))
            while left < right:
                while left < right and self.not_letters_digits(s[left]): left += 1
                while left < right and self.not_letters_digits(s[right]): right -= 1 
                s_l = ord(s[left]) - case if s[left] >= 'a' else ord(s[left])
                s_r = ord(s[right]) - case if s[right] >= 'a' else ord(s[right])
                if s_l != s_r: return False
                left += 1
                right -= 1
            return True
        
        def not_letters_digits(self, c):
            return not 'A' <= c <= 'Z' and not 'a' <= c <= 'z' and not '0' <= c <= '9'
    

    正则法

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

    来源:力扣(LeetCode)

    相关文章

      网友评论

          本文标题:32验证回文串

          本文链接:https://www.haomeiwen.com/subject/drhrdktx.html