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

LeetCode 1023: Camelcase Matching

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

基本資料
#

難易度: medium 第一次嘗試:2026-03-19

  • 提交紀錄:Accepted(一次通過)

解題思路
#

query 符合 pattern 的條件是:可以在 pattern 裡插入小寫字母變成 query。換句話說:

  1. pattern 是 query 的子序列。
  2. query 裡不屬於這個子序列的字元,全部都是小寫。

用雙指針比對:

  • 字元相同:兩邊都往前。
  • 不同,而且 query 這個字元是大寫:不能插入大寫,直接失敗。
  • 不同,而且是小寫:視為插入的字元,只移動 query 的指針。

最後 pattern 要用完,query 剩下的也必須全是小寫。

LeetCode 把這題標成 Trie,但每個 query 只跟 pattern 比一次,雙指針就夠了。

我的解法
#

class Solution:
    def camelMatch(self, queries: List[str], pattern: str) -> List[bool]:
        def match(q: str) -> bool:
            j = 0
            for ch in q:
                if j < len(pattern) and ch == pattern[j]:
                    j += 1
                elif ch.isupper():
                    return False
            return j == len(pattern)

        return [match(q) for q in queries]

原本的版本用 while 跑兩個指針,最後再檢查 query[r:] 剩下的部分是不是全小寫。改成 for 掃過整個 query 之後,「剩下的字元必須是小寫」也一起在迴圈裡檢查了。

複雜度
#

時間 O(所有 query 的總長度),空間 O(1),不算輸出。

要特別避免的錯誤
#

  • 只檢查 pattern 是不是子序列,忘記多出來的字元不能是大寫。
  • pattern 用完之後,沒有檢查 query 剩下的部分。

面試口說整理
#

query 符合的條件是 pattern 為它的子序列,而且多出來的字元都是小寫。我對每個 query 掃一遍,跟 pattern 目前的字元相同就推進 pattern 的指針,不同的話如果是大寫就直接失敗。最後 pattern 要剛好用完。每個 query 線性時間,不需要 Trie。

相關文章

LeetCode 3775: Reverse Words With Same Vowel Count
·1 分鐘
LeetCode Medium String Simulation Two-Pointers
LeetCode 3775 解題筆記:先數第一個字的母音數,後面母音數一樣的字就反轉
LeetCode 244: Shortest Word Distance II
·1 分鐘
LeetCode Medium Two-Pointers Design Hash-Table String Array
LeetCode 244 解題筆記:預處理每個字的出現位置(天然排序),查詢時對兩個位置列表做雙指針合併,每次移動比較小的那個
LeetCode 2337: Move Pieces to Obtain a String
·1 分鐘
LeetCode Medium Two-Pointers String
LeetCode 2337 解題筆記:跳過空格後兩邊的棋子順序必須一樣;L 只能往左、R 只能往右,所以每顆 L 在 start 的位置要 >= target,R 要 <=
LeetCode 777: Swap Adjacent in LR String
·1 分鐘
LeetCode Medium Two-Pointers String
LeetCode 777 解題筆記:XL→LX 是 L 往左、RX→XR 是 R 往右;跳過 X 後順序要一樣,L 只能往左、R 只能往右
LeetCode 809: Expressive Words
·2 分鐘
LeetCode Medium Two-Pointers String Array
LeetCode 809 解題筆記:兩個指針一段一段比對連續相同字元的長度;長度不同時,s 的那段必須至少 3 個且不少於 word;最後兩個字串都要剛好走完
LeetCode 1616: Split Two Strings to Make Palindrome
·2 分鐘
LeetCode Medium Two-Pointers String Greedy
LeetCode 1616 解題筆記:外側用 a 的前綴配 b 的後綴貪心比對,配不下去時,剩下的中間段必須整段在 a 或 b 裡是回文;兩個方向都要檢查