394. Decode String
這一個題目是 Stack 常見的考題做法
如果我們遇到連續的字元,就把「字元」不斷的組合起來
如果我們遇到連續的字元,就把「數字」不斷的組合起來
當遇上
[時,會先把「(當前的數值,以及目前的答案)」先存到 Stack 裡面,因為括號可能會有很多層,最先遇到括號的要最後處理,此時先把答案歸零,繼續處理子問題。當遇上
]時,要把 Stack 最後一組數值拿出來處理,拿出來的會是之前完整的答案,現在要做的是把當前的答案組合出來,當前的答案的組法會是前方已經有的答案 + 括號前面的數字為重複次數乘上當前的答案。
class Solution:
def decodeString(self, s: str) -> str:
stack = []
digits = 0
chars = ''
for char in s:
if char == '[':
stack.append((chars, digits))
chars = ''
digits = 0
elif char == ']':
prevChars, prevDigits = stack.pop()
chars = prevChars + prevDigits * chars
elif char.isdigit():
digits = digits * 10 + int(char)
else:
chars += char
return chars這一題一樣也可以用遞迴的方式來寫,類似於 224. Basic Calculator 的作法一樣,括號內的問題是可以用遞迴關係式來處理的。
Last updated