394. Decode String
題目網址:https://leetcode.cn/problems/decode-string/
題意:給一經過編碼的 string, 返回它解碼後的 string。
編碼規則為:
k[encoded_string], 表示括號中的encoded_string重覆k次, 其中k保證為正整數。input string 總是有效的, 其中沒有額外的空格, 且括號總是符合格式要求的。
此外, 所有的數字都只表示重覆的次數
k, e.g. 不會出現像3a或2[4]的輸入。

Solution:
想法:利用 Stack, 可分成以下四種情況
- 當
s[i]為數字時, 則不斷更新當前數字num- 當
s[i]為字母時, 則不斷更新當前 stringres- 當
s[i]為[時, 則將num、res各自 push 到對應的 stack 中- 當
s[i]為]時
- 取出
times = nums.top(), 並將當前 stringres累加times次到strs.top()中- 再將
strs.top()assign 給res- 最後, 分別 pop
nums、strse.g.
s = "3[a2[c]]"
i = 0,s[i] = "3":num = 3,res = ""i = 1,s[i] = "[":nums = {3},strs = {""}, 且num = 0,res = ""i = 2,s[i] = "a":num = 0,res = "a"i = 3,s[i] = "2":num = 2,res = "a"i = 4,s[i] = "[":nums = {3, 2},strs = {"", "a"}, 且num = 0,res = ""i = 5,s[i] = "c":num = 0,res = "c"i = 6,s[i] = "]":
num = 2,res = "c"➔nums = {3},strs = {"", "acc"}
➔strs = {""},res = "acc"i = 7,s[i] = "]":
num = 3,res = "acc"➔nums = {},strs = {"", "accaccacc"}
➔strs = {""},res = "accaccacc"
class Solution { |
- time:$O(n)$ ➔ 遍歷
s, 其中n為s的長度 - space:$O(n)$ ➔ 若不考慮
res, 則取決於nums、strs的長度, 而兩者的長度皆不超過n
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論