↓快轉到主要內容
  1. LeetCode/

LeetCode 125: Valid Palindrome

·1 分鐘· ·
LeetCode Easy Two-Pointers String
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-16

  • 提交紀錄:Runtime Error ×2 → Accepted ×2 → Wrong Answer ×2 → Accepted ×8 → Wrong Answer → Accepted ×2

解題思路
#

左右指針往中間走(Two Pointers 模板一):兩邊各自跳過不是英文字母或數字的字元,再比較轉成小寫後是否相同。

我的嘗試
#

2022-08 第一次寫的是「用 isalnum 過濾、轉小寫、跟反轉比」,前兩版是 generator 少打了 in s、sif 黏在一起的語法錯誤,修好就 AC。之後兩次重寫:2022-10 改用 isalpha 過濾(也忘了轉小寫),2026 年用左右指針、自己寫了只判斷英文字母的函式,兩次都漏掉數字,例如 "1A":1 和 a 不同,答案 False,回傳 True。

正確解法
#

class Solution:
    def isPalindrome(self, s: str) -> bool:
        l, r = 0, len(s) - 1
        while l < r:
            if not s[l].isalnum():
                l += 1
            elif not s[r].isalnum():
                r -= 1
            elif s[l].lower() != s[r].lower():
                return False
            else:
                l, r = l + 1, r - 1
        return True

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 題目說的是 alphanumeric,數字也要比,不能只留字母。

面試口說整理
#

我用左右指針往中間走,遇到不是英數字元就跳過,其他的轉小寫比較,有一對不同就不是回文。時間 O(n)、空間 O(1)。

相關文章

LeetCode 28: Find the Index of the First Occurrence in a String
·1 分鐘
LeetCode Easy Two-Pointers String String-Matching Z-Algorithm
LeetCode 28 解題筆記:在每個起點比對 needle,或直接用 str.find;index 找不到會丟例外
LeetCode 27: Remove Element
·1 分鐘
LeetCode Easy Array Two-Pointers
LeetCode 27 解題筆記:寫入指標只寫不等於 val 的數,最後回傳寫入的個數
LeetCode 58: Length of Last Word
·1 分鐘
LeetCode Easy String
LeetCode 58 解題筆記:split() 不帶參數會忽略結尾的空白,取最後一個單字的長度
LeetCode 67: Add Binary
·1 分鐘
LeetCode Easy Math String Bit-Manipulation Simulation
LeetCode 67 解題筆記:從兩個字串的尾巴往前逐位相加,進位是 sum // 2,這一位是 sum % 2
LeetCode 26: Remove Duplicates from Sorted Array
·1 分鐘
LeetCode Easy Array Two-Pointers
LeetCode 26 解題筆記:快慢指針原地覆寫,慢指針指向下一個要寫的位置;遇到跟前一個寫入的值不同才寫
LeetCode 14: Longest Common Prefix
·1 分鐘
LeetCode Easy Array String Trie
LeetCode 14 解題筆記:用最短的字串當上限,逐個位置檢查所有字串是否相同,第一個不同的位置就是答案的長度