验证回文串

题目描述

来源于 https://leetcode-cn.com/

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

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

示例 1:

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

示例 2:

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

解法:

在 Python 中 str.isalpha 并不是只对 a-zA-Z0-9 返回真,而是对所有语言中的 “字母”, 即语言的基本组成,比如 str.isalpha("你") -> True。此处应该如果要限定英文字母和数字,需要使用 str.isasciistr.isdigit 但是 str.isascii 是 Python 3.7 新加的,leetcode 目前的 Python 环境还低于 Python 3.7。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        # s = [c for c in s if c.isascii() or c.isdigit()]
        s = [c for c in s if c.isalnum()]
        lo, hi = 0, len(s) - 1
        
        while lo < hi:
            if s[lo].lower() == s[hi].lower():
                lo += 1
                hi -= 1
            else:
                return False

        return True