1. 程式人生 > 其它 >每日leetcode-陣列-125. 驗證迴文串

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