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

LeetCode 1047: Remove All Adjacent Duplicates In String

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

基本資料
#

難易度: easy 第一次嘗試:2022-09-30

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

解題思路
#

跟前一個字元互動(Stack 模板二):stack 頂端等於目前字元就 pop(兩個一起消掉),否則 push。消掉之後新的頂端會變成「前一個字元」,連鎖的消除自然就處理好了。

我的嘗試
#

第一版沒有檢查 stack 是不是空的就讀 stack[-1](IndexError)。中間有一版多加了一個 temp 想跳過連續相同的字元,一次把三個相同的都消掉了:"aaa" 回傳空字串,答案 "a"。

正確解法
#

class Solution:
    def removeDuplicates(self, s: str) -> str:
        st = []
        for c in s:
            if st and st[-1] == c:
                st.pop()
            else:
                st.append(c)
        return "".join(st)

複雜度
#

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

要特別避免的錯誤
#

  • 取 st[-1] 前要確認 stack 不是空的。
  • 一次只消一對:"aaa" 剩下 "a"。

面試口說整理
#

我用 stack,頂端跟目前字元相同就一起消掉,否則放進去;消掉之後新的頂端會跟下一個字元比,連鎖消除自然就處理了。時間 O(n)。

相關文章

LeetCode 1021: Remove Outermost Parentheses
·1 分鐘
LeetCode Easy String Stack Bracket-Sequences
LeetCode 1021 解題筆記:用深度計數取代 stack,深度從 0 變 1 的左括號和從 1 變 0 的右括號是外層,其他都保留
LeetCode 844: Backspace String Compare
·1 分鐘
LeetCode Easy Two-Pointers String Stack Simulation
LeetCode 844 解題筆記:用 stack 模擬退格;O(1) 空間的話從尾巴往前,遇到 # 就記下要跳過幾個字元
LeetCode 1002: Find Common Characters
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 1002 解題筆記:每個單字各自計數,對所有 Counter 取交集(每個字元取最小次數),再展開
LeetCode 929: Unique Email Addresses
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 929 解題筆記:用 @ 切開,只處理 local 的部分(+ 之後丟掉、去掉 .),接回 domain 後放進集合
LeetCode 944: Delete Columns to Make Sorted
·1 分鐘
LeetCode Easy Array String Longest-Increasing-Subsequence
LeetCode 944 解題筆記:用 zip(*strs) 取出每一欄,數有幾欄不是非遞減的
LeetCode 953: Verifying an Alien Dictionary
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 953 解題筆記:把字母對應到外星順序的 index,相鄰兩個單字找第一個不同的字元比較,沒有不同時短的要在前面