每日leetcode-陣列-125. 驗證迴文串
阿新 • • 發佈:2021-06-16
分類:字串-迴文串的定義
題目描述:
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
迴文串的定義:迴文串就是指正反讀一樣的字串。
解題思路:
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:用兩個指標,往中間移動,依此判斷是否相等
classSolution: 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)。