LC 0394 [M] Decode String - ALawliet/algorithms GitHub Wiki

class Solution(object):
    def decodeString(self, s):
        stack = []; curNum = 0; curString = ''
        for c in s:
            if c == '[':
                stack.append(curString)
                stack.append(curNum)
                curString = ''
                curNum = 0
            elif c == ']':
                prevNum = stack.pop()
                prevString = stack.pop()
                curString = prevString + prevNum*curString
            elif c.isdigit():
                curNum = curNum*10 + int(c)
            elif c.isalpha():
                curString += c
        return curString
class Solution:
    def decodeString(self, s: str) -> str:
        closePos = {}
        l = []
        for i, c in enumerate(s):
            if c == '[':
                l.append(i)
            elif c == ']':
                closePos[l.pop()] = i

        def parse(l, r):
            mult = 0
            ans = []
            while l <= r:
                c = s[l]
                if c.isdigit():
                    mult = mult*10 + int(c)
                elif c.isalpha():
                    ans.append(c)
                elif c == '[':
                    ans.append(mult * parse(l + 1, closePos[l] - 1))
                    mult = 0
                    l = closePos[l]
                l += 1
            return ''.join(ans)

        return parse(0, len(s) - 1)