125 - 验证回文串 - python

98 阅读1分钟

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

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

示例 1:

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

示例 2:

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

该题要求判断字符串是否为回文串,而且只考虑不区分大小写的字母和数字。因此解决该题可以分为两步:

  • 依次访问字符串中的的元素,只保留字符和数字

  • 设置两个指针pq分别指向头和尾,然后判断指向的元素是否相同

    • 如果相同则p往后移,q往前移,直到p >= q
    • 如果中间有不同之处,则直接返回False

AC code:

class Solution:
    def isPalindrome(self, s: str) -> bool:
        if s == '': return True
        # 先将s转换为小写形式
        s = s.lower()
        # 合法字符
        numbers = '1234567890'
        letters ='qwertyuiopasdfghjklzxcvbnm'
        
        res = [s[i] for i in range(len(s)) if s[i] in numbers + letters]
 
        l, r = 0, len(res) - 1
        while l <= r:
            if res[l] == res[r]:
                l += 1
                r -= 1
            else:
                return False
            
        return True

或者可以求出中点后比较中点左右的字符串是否是对称的。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        if s == '': return True
        
        s = s.lower()
        numbers = '1234567890'
        letters ='qwertyuiopasdfghjklzxcvbnm'
        
        res = [i for i in s if i in numbers + letters]
        return res == res[::-1]