diff --git a/0385-mini-parser/0385-mini-parser.py b/0385-mini-parser/0385-mini-parser.py new file mode 100644 index 0000000..b0bb093 --- /dev/null +++ b/0385-mini-parser/0385-mini-parser.py @@ -0,0 +1,84 @@ +# """ +# This is the interface that allows for creating nested lists. +# You should not implement it, or speculate about its implementation +# """ +#class NestedInteger: +# def __init__(self, value=None): +# """ +# If value is not specified, initializes an empty list. +# Otherwise initializes a single integer equal to value. +# """ +# +# def isInteger(self): +# """ +# @return True if this NestedInteger holds a single integer, rather than a nested list. +# :rtype bool +# """ +# +# def add(self, elem): +# """ +# Set this NestedInteger to hold a nested list and adds a nested integer elem to it. +# :rtype void +# """ +# +# def setInteger(self, value): +# """ +# Set this NestedInteger to hold a single integer equal to value. +# :rtype void +# """ +# +# def getInteger(self): +# """ +# @return the single integer that this NestedInteger holds, if it holds a single integer +# Return None if this NestedInteger holds a nested list +# :rtype int +# """ +# +# def getList(self): +# """ +# @return the nested list that this NestedInteger holds, if it holds a nested list +# Return None if this NestedInteger holds a single integer +# :rtype List[NestedInteger] +# """ + +class Solution: + def deserialize(self, s: str) -> NestedInteger: + """ + Complexities: + Time: O(n) + Space: O(n) + + where n = len(s) + """ + + # base case: number + if s[0] != "[": + return NestedInteger(int(s)) + + # is a list + head = NestedInteger() + stack = [head] + + i = 1 + while i < len(s): + if s[i] == ",": + i += 1 + elif s[i] == "[": + newNestedInteger = NestedInteger() + stack[-1].add(newNestedInteger) + stack.append(newNestedInteger) + i += 1 + elif s[i] == "]": + stack.pop() + i += 1 + else: # Is number or '-' + # Find entire number + j = i + while s[j] not in ",]": + j += 1 + newInt = int(s[i:j]) + stack[-1].add(NestedInteger(newInt)) + i = j + + return head +