iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
自我挑戰組

從零開始學習LeetCode系列 第 28

Day 28 Valid Palindrome

  • 分享至 

  • xImage
  •  

題目給定一個字串 s,判斷它是否為迴文
迴文的意思是「正著讀、反著讀都一樣」

  • 例如
    "A man, a plan, a canal: Panama" → 是迴文
    "race a car" → 不是迴文
  • 忽略非英文字母與數字的符號(只看英文與數字)
  • 不分大小寫
    https://ithelp.ithome.com.tw/upload/images/20251012/20169339YkoinAUCJJ.jpg

解法一

  • 用字串處理
  • 先把字串裡的字母與數字挑出來、全部轉成小寫,
    然後再比對正反字串是否相等。

class Solution:
def isPalindrome(self, s: str) -> bool:
clean = ""
for c in s:
if c.isalnum(): # 判斷是否為字母或數字
clean += c.lower()
return clean == clean[::-1] # 與反轉後字串比對

註解

  • isalnum() → 只保留英文字母與數字
  • lower() → 統一轉小寫,避免大小寫差異
  • [::-1] → Python 快速反轉字串的方法。

理解

  • 想像你拿一支筆,
    把 "A man, a plan, a canal: Panama" 寫在紙上,
    只抄出英文跟數字(變成 "amanaplanacanalpanama"),
    再從後面看一次,發現一模一樣

解法二
https://ithelp.ithome.com.tw/upload/images/20251012/20169339GBZXIfYUrH.jpg
註解

  • isalnum() → 只保留英文字母與數字,跳過空格、符號等
  • lower() → 忽略大小寫
  • left → 從左邊開始比對的指標
  • right → 從右邊開始比對的指標
  • 雙指標策略 → 從兩邊往中間比對,遇到不符合條件的就跳過

理解

  • 一開始先設左右兩個指標,分別在字串最左邊和最右邊
  • 左右兩邊慢慢往中間靠攏,遇到不是字母或數字的就跳過
  • 比對左右的字母(不分大小寫)
  • 有任何一對不同就立刻回傳 False
  • 全部都一樣就回傳 True

上一篇
Day 27 Longest Common Prefix
下一篇
Day29 First Unique Character in a String
系列文
從零開始學習LeetCode30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言