【leetcode 125】【验证回文串】【双指针专题】

leetcode 125【验证回文串】

题目链接

https://leetcode-cn.com/problems/valid-palindrome/


解题思路与代码思路:

逆序判断

对字符串 ss 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 \textit{sgood}sgood 中。这样我们只需要判断 \textit{sgood}sgood 是否是一个普通的回文串即可。

双指针(原地该字符串)

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


代码:

逆序判断
class Solution:
    def isPalindrome(self, s: str) -> bool:
        # 转成小写,去掉其他字符,反向是否相等
        temp = []
        s = s.lower()
        for i in s:
            if i.isalnum():
                temp.append(i)
        return temp == temp[::-1]
        
另一种写法
class Solution:
    def isPalindrome(self, s: str) -> bool:
        snice = "".join(i.lower() for i in s if i.isalnum())
        return snice == snice[::-1]
双指针(原地该字符串)
class Solution:
    def isPalindrome(self, s: str) -> bool:
        i = 0
        j = len(s)-1
        while i<j:
            while i<j and not s[i].isalnum():
                i += 1
            while i<j and not s[j].isalnum():
                j -= 1
            if i<j:
                if s[i].lower() != s[j].lower():
                    return False
                i+=1
                j-=1
        return True

        

复 杂 度 分 析 : \color{red}{复杂度分析:}
  1. 逆序判断
  • 时间复杂度:O(S)
  • 空间复杂度:O(S)
  1. 双指针
  • 时间复杂度:O(S)
  • 空间复杂度:O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值