日期:2026年9月27日
LeetCode 題目連結:1190. Reverse Substrings Between Each Pair of Parentheses
解題想法
中等難度題。題目給一個字串 $s$,$s$ 之中只有小寫英文字母及 (、),括號一定成對,有巢狀結構,也就是左、右括號之間有其它的括號。要將每一對括號之間的子字串反序,回傳處理完的字串。以 (u(love)i) 為例,先處理最裡面的括號,將 love 反序後變成 evol;再處理外面的括號,原來的字串為 uevoli,反序後變成 iloveu。
這題很適合用堆疊 (stack) 處理。先建一個堆疊 $st$ 並放入空字串。用一個 for 迴圈依序讀取 $s$ 的字元 $c$,依照 $c$ 的值分為 3 種狀況:
- 左括號,新的區段,$st$ 加入空字串。
- 右括號,結算最後一個區段。移除 $st$ 最後一項,暫存到 $t$。$t$ 反序後接到 $st$ 最後一項。
- 字母,$c$ 接到 st 最後一項。
Python 程式碼
Runtime: 0 ms, beats 100.00%. Memory: 19.26 MB, beats 69.70%.
class Solution:
def reverseParentheses(self, s: str) -> str:
st = [""] # 儲存每一對括號內容的堆疊,先放入空字串
for c in s: # 依序讀取 s 的字元 c
if c == '(': # 左括號
st.append("") # 新的區段,st 加入空字串
elif c == ')': # 右括號,結算最後一個區段
t = st.pop() # 移除 st 最後一項,暫存到 t
st[-1] += t[::-1] # t 反序後接到 st 最後一項
else: # 字母
st[-1] += c # 接到 st 最後一項
return st[0] # 答案會在 st 首項