385. 迷你语法分析器

exiaohu 于 2022-04-15 发布

题目链接:385. 迷你语法分析器

通过正则实现词法分析,然后使用一个栈实现语法分析器。题目保证输入数据一定合法,因此最终留在栈中的一定只有一个 NestedInteger

class Solution:
    def deserialize(self, s: str) -> NestedInteger:
        stack = []
        for mo in re.finditer(r'([\-0-9]+)|(])|(\[)|(,)', s):
            token = mo.group()
            if token == '[':
                stack.append(token)
            elif token == ']':
                eles = []
                while stack:
                    e = stack.pop()
                    if e == '[':
                        break
                    eles.append(e)
                ele = NestedInteger()
                while eles:
                    e = eles.pop()
                    ele.add(e)

                stack.append(ele)
            elif token == ',':
                pass
            else:  # token is an integer
                stack.append(NestedInteger(int(token)))

        return stack.pop()