【LeetCode】125. 验证回文串

一、题目描述

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

示例 1:

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

示例 2:

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

二、解题思路 & 代码

2.1 直接取反比较

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

2.2 双指针(需新建数组)

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s_list= [ch.lower() for ch in s if ch.isalnum()]
        sgood = "".join(s_list)  # 列表转为字符串
        n = len(sgood)
        left, right = 0, n - 1
        
        while left < right:
            if sgood[left] != sgood[right]:
                return False
            left, right = left + 1, right - 1
        return True

复杂度分析

  • 时间复杂度:O(|s|),其中 |s| 是字符串 s 的长度
  • 空间复杂度:O(|s|)

2.3 双指针(在原字符串上直接判断)

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

复杂度分析

  • 时间复杂度:O(∣s∣),其中 |s| 是字符串 s 的长度。
  • 空间复杂度:O(1)。

参考:

  1. LeetCode官方题解
全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
人来疯的六边形战士bbq了:你尝试下在boss 上把学校改为天津大学,其他的不用改就有人回复了,然后你会怀疑普通学校跟985用的是不是同一个软件
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务