125、验证回文串

本文介绍了三种解决LeetCode中125题的有效方法。第一种通过创建新字符串并反转对比,第二种采用双指针从两端向中间比较,第三种也是双指针,但在原字符串上处理,跳过非字母数字字符。每种方法都确保了字母和数字的大小写不敏感。
摘要由CSDN通过智能技术生成

1、 解题思路

1.首先将字母转换为统一格式
2.遍历字符串,如果是字母或数字,加入列表
3.将添加完的列表进行反转,然后与原列表比较,得出结果
官方的这个思路和我的一样,直接用字符串,比我的简洁。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        letters = []
        s = s.lower()
        for i in s:
            if i.isalpha() or i.isdigit():
                letters.append(i)
        reverse_letters = list(reversed(letters))
        return reverse_letters == letters
class Solution:
    def isPalindrome(self, s: str) -> bool:
        new_s = "".join(ch.lower() for ch in s if ch.isalnum())
        return new_s == new_s[::-1]

2、解题思路

这个和1思路是一样的,先处理字符串。不同的是使用双指针进行循环比较,就是首位和末位分别用一个指针表示,然后分别依次递增和递减,进行比较。

class Solution:
    def isPalindrome(self, s: str) -> bool:
 	    new_s = "".join(ch.lower() for ch in s if ch.isalnum())
 	    left,right = 0, len(new_s)-1

 	    while left < right:
 		    if new_s[left] != new_s[right]:
 			    return False
 		    left,right = left+1, right-1
 	    return True

3、解题思路

这种和思路2有相似之处,同样使用双指针,不同的是直接在原字符串上处理。所以此处需要让指针循环递增或递减,直到找到字母或数字,然后进行判断。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        new_s = "".join(ch.lower() for ch in s if ch.isalnum())
	    left,right = 0, len(new_s)-1

	    while left < right:
		    while left < right and not new_s[left].isalnum():
			    left = left+1
		    while left < right and not new_s[right].isalnum():
			    right = right-1
		    if new_s[left].lower() != new_s[right].lower():
			    return False
		    left,right = left+1, right-1
	    return True

链接:https://leetcode-cn.com/problems/valid-palindrome/solution/125-yan-zheng-hui-wen-chuan-by-senlindu-h8xo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值