題目解釋
給定一個字串 s
,如果它是回文 (palindrome) 則傳回 true,否則傳回 false。
需要統一 downcase 成小寫字母以及移除所有非字母的部分(數字、標點符號等)。
範例
- 輸入:
s = "A man, a plan, a canal: Panama"
- 輸出:
true
處理後的字串 "amanaplanacanalpanama" 是回文。
最佳解法
步驟
- 將
s
處理後存為cleaned_str
- 令雙指標
left
跟right
- 比較
left
與right
指到的字母是否一樣
程式碼
class Solution:
def isPalindrome(self, s: str) -> bool:
cleaned_str = ""
for i in s:
if i.isalnum():
cleaned_str += i.lower()
left, right = 0, len(cleaned_str) - 1
while left < right:
if cleaned_str[left] != cleaned_str[right]:
return False
left += 1
right -= 1
return True
時間複雜度
O(n)
,n 是 s
的字母個數。
空間複雜度
O(n)
。
結語
個人感覺要記得 isalnum()
這件事可比用雙指標難多了。
Latest posts by 數據女巫 𝔻.𝕡𝕪𝕤 🔮 (see all)
- [資料工程筆記] 資料市集(Data Mart)介紹與在三大雲端服務的工具名詞對照 - 2025-07-25
- [資料工程筆記] 資料倉儲(Data Warehouse)介紹與在三大雲端服務的工具名詞對照 - 2025-07-23
- [資料工程筆記] 資料湖(Data Lake)介紹與在三大雲端服務的工具名詞對照 - 2025-07-21