385. Mini Parser - cocoder39/coco39_LC GitHub Wiki

385. Mini Parser

class Solution:
    def deserialize(self, s: str) -> NestedInteger:
        if not s:
            return NestedInteger()
        
        if s[0] != '[': 
            return NestedInteger(int(s))
        
        stack = []
        num = ''
        for ch in s:
            if ch.isdigit() or ch == "-": 
                num += ch
            elif ch == '[':
                stack.append(NestedInteger())
            elif ch in ',]':
                if num:
                    stack[-1].add(NestedInteger(int(num)))
                    num = ''
                if ch == ']' and len(stack) > 1:
                    ni = stack.pop()
                    stack[-1].add(ni)
        return stack[0]

    def serialize(self, nested_integer: NestedInteger) -> str:
        if nested_integer.isInteger():
            return str(nested_integer.getInteger())
        
        res = []
        for ni in nested_integer.getList():
            res.append(self.serialize(ni))
        res = ','.join(res)
        return '[' + res + ']'