# Decode String

这是一道典型的stack题，但如果要我当场做出来其实还是需要脑子拐一点弯。

```python
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,&#x20;

"\[" 条件我们把\[ 之前的curr string 和 count push到stack

"]" 条件我们把stack上最靠近的两个prevstring 和count弄出来和当前curr融合成新的curr string

```python
如下的顺序进行
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"
```

```python
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
```
