385. Mini Parser
Given a nested list of integers represented as a string, implement a parser to deserialize it.
Each element is either an integer, or a list – whose elements may also be integers or other lists.
Note: You may assume that the string is well-formed:
String is non-empty.
String does not contain white spaces.
String contains only digits 0-9, [, - , ].
Example 1:
Given s = “324”,
You should return a NestedInteger object which contains a single integer 324.
Example 2:
Given s = “[123,[456,[789]]]”,
Return a NestedInteger object containing a nested list with 2 elements:
- An integer containing value 123.
- 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.
Approach
- 字符串的题非常的灵活,很考验能力,需要很强的分析能力,找到突破口。字符串题往往与迭代或递归或两者结合在一起。
Code
class Solution {
public:
NestedInteger deserialize(string& s, int from, int to) {
if (s[from] != '[') {
return NestedInteger(stoi(s.substr(from, to - from)));
}
NestedInteger res;
from++;
to--;
int prev = from, opened = 0;
for (int i = from; i < to; ++i) {
if (s[i] == '[') {
opened++;
} else if (s[i] == ']') {
opened--;
} else if (s[i] == ',' && opened == 0) {
res.add(deserialize(s, prev, i));
prev = i + 1;
}
}
if (prev < to) {
res.add(deserialize(s, prev, to));
}
return res;
}
NestedInteger deserialize(string s) {
return deserialize(s, 0, s.size());
}
};