Decode String
https://leetcode.com/contest/leetcode-weekly-contest-3/problems/decode-string/
这是一道典型的stack题,但如果要我当场做出来其实还是需要脑子拐一点弯。
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
在这里面有三个重要的元素,current,prev 和count
四个判定条件:digit, "[" , "]" 和 char本身。
digit条件帮助我们得到count, 然后char帮助我们得到current,
"[" 条件我们把[ 之前的curr string 和 count push到stack
"]" 条件我们把stack上最靠近的两个prevstring 和count弄出来和当前curr融合成新的curr string
如下的顺序进行
s = "3[a]2[bc]"
1. "aaa" 2 [bc]
这时候的curr是"aaa"
count是0
2.
这时候count变成2 我们碰到了 "["
于是 stack = ["aaa",2]
curr是 "bc"
3.
这时候我们碰到"]"
stack.pop()
两次,得到prev="aaa", count = 2
curr = "aaa" + 2 * curr = "aaa" + "bcbc"="aaabcbc"
class Solution:
def decodeString(self, s: str) -> str:
curr = ""
cnt = 0
stack = []
for i in s:
if i.isdigit():
cnt = cnt*10 + int(i)
elif i == "[":
stack.append(curr)
stack.append(cnt)
curr = ""
cnt = 0
elif i == "]":
c = stack.pop()
prev = stack.pop()
curr = prev + curr * c
else:
curr += i
return curr
Last updated
Was this helpful?