每日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)。