每日leetcode-数组-125. 验证回文串

分类:字符串-回文串的定义

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

回文串的定义:回文串就是指正反读一样的字符串。

解题思路:

1.把所有符合条件的字符写入一个列表,然后判断其逆序是否相等。

class Solution:
    def isPalindrome(self, s: str) -> bool:
        all = []
        for i in s:
            if i.isalnum():
                all.append(i.lower())
        b = list(reversed(all))
        return all == b

注意: reverse函数  返回的是空值,所以不能用reverse

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

#写入字符串

复杂度分析

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

空间复杂度:O(|s|)。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串与原字符串 s 完全相同,因此需要使用 O(|s|)的空间。

解题思路2:用两个指针,往中间移动,依此判断是否相等

class Solution:
    def isPalindrome(self, s: str) -> bool:
        left,right = 0 , len(s)-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].upper() != s[right].upper():
                    return False
                left += 1
                right -= 1
        return True

复杂度分析

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

  • 空间复杂度:O(1)

原文地址:https://www.cnblogs.com/LLLLgR/p/14891198.html