leetcode-125:验证回文串

LC 验证回文串

  • 题目
  • 解题:
    • 方法一:筛选 + 判断
    • 方法二:在原字符串上直接判断

题目

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

示例 1:

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

示例 2:

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

解题:

方法一:筛选 + 判断

class Solution:
    def isPalindrome(self, s: str) -> bool:
        sgood = "".join(ch.lower() for ch in s if ch.isalnum())
        return sgood == sgood[::-1]

方法二:在原字符串上直接判断

我们直接在原字符串 ss 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        n = len(s)
        left, right = 0, n - 1
        
        while left < right:
            while left < right and not s[left].isalnum():
                left += 1
            while left < right and not s[right].isalnum():
                right -= 1
            if left < right:
                if s[left].lower() != s[right].lower():
                    return False
                left, right = left + 1, right - 1

        return True

这些方法都使用了isalnum()方法,如果不用这个就需要用到ord()转为ASCII码,用chr()把ASCII码转为字符,手动转为小写和数字。

你可能感兴趣的:(算法从零开始python,leetcode,算法,python,字符串)