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

LeetCode 3612: Process String with Special Operations I

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

基本資料
#

難易度: medium 第一次嘗試:2025-07-13

  • 提交紀錄:Wrong Answer → Accepted

解題思路
#

照規則模擬(String 模板一)。用 list 當結果,* 是 pop、# 是 res += res、% 是反轉、字母就 append,最後 join。

我的嘗試
#

第一版寫成 if char == "*" and res:。結果是空的時候這個條件不成立,* 就往下掉到最後的 elif char.lower() == char,而 "*".lower() 還是 "*",被當成字母加進結果。例如 "*":答案是空字串,這版回傳 "*"。把 if res 移到分支裡面就 AC 了。

正確解法
#

class Solution:
    def processStr(self, s: str) -> str:
        res = []
        for ch in s:
            if ch == "*":
                if res:
                    res.pop()
            elif ch == "#":
                res += res
            elif ch == "%":
                res.reverse()
            else:
                res.append(ch)
        return "".join(res)

複雜度
#

結果長度可能每次 # 都翻倍,時間和空間都跟最後的長度成正比。

要特別避免的錯誤
#

  • 用 and 把額外條件塞進分支判斷時,條件不成立會掉到後面的分支。
  • ch.lower() == ch 不能用來判斷字母,符號也會成立;用 ch.isalpha() 或直接放在 else。

面試口說整理
#

我用 list 模擬四種操作,最後 join。要注意 * 在結果是空的時候什麼都不做,判斷要寫在分支裡,不然它會掉到後面被當成字母。時間跟輸出長度成正比。

相關文章

LeetCode 43: Multiply Strings
·1 分鐘
LeetCode Medium Math String Simulation
LeetCode 43 解題筆記:num1[i] × num2[j] 的結果落在第 i + j + 1 位,用一個長度 n + m 的陣列累加後再統一進位
LeetCode 3121: Count the Number of Special Characters II
·1 分鐘
LeetCode Medium Hash-Table String
LeetCode 3121 解題筆記:記錄每個字母小寫最後一次出現和大寫第一次出現的位置,小寫最後一次在大寫第一次之前才算
LeetCode 735: Asteroid Collision
·1 分鐘
LeetCode Medium Array Stack Simulation
LeetCode 735 解題筆記:從左到右用 stack,只有「stack 頂端往右、目前的往左」才會相撞,小的爆掉,一樣大一起爆
LeetCode 402: Remove K Digits
·1 分鐘
LeetCode Medium String Stack Greedy Monotonic-Stack
LeetCode 402 解題筆記:單調遞增 stack,遇到比頂端小的數字就把頂端刪掉(還有 k 次可刪時),最後去掉前導零
LeetCode 187: Repeated DNA Sequences
·1 分鐘
LeetCode Medium Hash-Table String Bit-Manipulation Sliding-Window
LeetCode 187 解題筆記:把每個長度 10 的子字串丟進雜湊表計數,出現超過一次的就是答案
LeetCode 227: Basic Calculator II
·1 分鐘
LeetCode Medium Math String Stack
LeetCode 227 解題筆記:先把數字讀完整,遇到運算子時處理上一個運算子:+ - 把數放進 stack(減號放負數),* / 直接跟頂端算