394. Decode String (Medium) - TengnanYao/daily_leetcode GitHub Wiki

class Solution:
    def decodeString(self, s: str) -> str:
        stack = []
        cur = ""
        for c in s:
            if c == "[":
                stack.append(cur)
                cur = ""
            elif c == "]":
                if cur:
                    if stack[-1].isalpha():
                        stack[-1] += cur
                    else:
                        stack.append(cur)
                    cur = ""
                word = stack.pop()
                num = stack.pop()
                if stack and stack[-1].isalpha():
                    stack[-1] += word * int(num)
                else:
                    stack.append(word * int(num))
            else:
                if cur and cur.isalpha() and c.isdigit():
                    if stack and stack[-1].isalpha():
                        stack[-1] += cur
                    else:
                        stack.append(cur)
                    cur = c
                else:
                    cur += c
        return "".join(stack) + cur