欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode125. Valid Palindrome

程序员文章站 2024-03-06 23:41:08
...

文章目录

链接

link

思路

之前的思路是,先把不是字母数字的符号去掉,然后再将剩余的序列逆序,最后比较是否一致。但是感觉也不是很好操作。因为要删除

c

不知道数组长度,不会用

python

1.

这里需要创建一个新的数组来储存,直接在原数组上del会有些麻烦,因为原数组改变了。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        new = []
        for ch in list(s):
            j = 0

            # 如果不是数字字母的话
            if not ch.isalnum():
                pass
            elif ch.isalpha():
                new.append(ch.lower())
            else:
                new.append(ch)

        new2 = list(reversed(new))
        return (new == new2)

将列表翻转,还可以

new2 = new1[::-1]

2.

1.的简单写法
*可以最后再统一大小写,不用每一步都统一

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

3.

双指针法

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