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?