Skip to main content

Mini Parser

Problem Description​

Given a string s represents the serialization of a nested list, implement a parser to deserialize it and return the deserialized NestedInteger.

Each element is either an integer or a list whose elements may also be integers or other lists.

Examples​

Example 1:

Input: s = "324"
Output: 324
Explanation: You should return a NestedInteger object which contains a single integer 324.

Example 2:


Input: s = "[123,[456,[789]]]"
Output: [123,[456,[789]]]
Explanation: Return a NestedInteger object containing a nested list with 2 elements:
1. An integer containing value 123.
2. A nested list containing two elements:
i. An integer containing value 456.
ii. A nested list with one element:
a. An integer containing value 789

Constraints​

  • 1 <= s.length <= 5 * 10^4
  • s is the serialization of valid NestedInteger
  • All the values in the input are in the range [-10^6, 10^6]

Solution for Mini Parser​

Approach​

This solution uses a stack to record the NestedInteger's. At the very beginning, an empty NestedInteger is placed in the stack. This NestedInteger will be regarded as a list that holds one but only one NestedInteger, which will be returned in the end. Logic: When encountering '[', the stack has one more element. When encountering ']', the stack has one less element.

Code in Different Languages​

Written by @agarwalhimanshugaya
class Solution {
public:
NestedInteger deserialize(string s) {
function<bool(char)> isnumber = [](char c){ return (c == '-') || isdigit(c); };

stack<NestedInteger> stk;
stk.push(NestedInteger());

for (auto it = s.begin(); it != s.end();) {
const char & c = (*it);
if (isnumber(c)) {
auto it2 = find_if_not(it, s.end(), isnumber);
int val = stoi(string(it, it2));
stk.top().add(NestedInteger(val));
it = it2;
}
else {
if (c == '[') {
stk.push(NestedInteger());
}
else if (c == ']') {
NestedInteger ni = stk.top();
stk.pop();
stk.top().add(ni);
}
++it;
}
}

NestedInteger result = stk.top().getList().front();
return result;
}
};

Complexity Analysis​

Time Complexity: O(N)O(N)​

Space Complexity: O(N)O(N)​

References​