Leetcode125. Valid Palindrome

文章目录

链接

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
上一篇:409. Longest Palindrome - leetcode


下一篇:java – Palindrome Permutation(破解编码访谈1.4)