https://leetcode.com/problems/mini-parser/ /** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * // Constructor initializes an empty nested list. * public NestedInteger(); * * // Constructor initializes a single integer. * public NestedInteger(int value); * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // Set this NestedInteger to hold a single integer. * public void setInteger(int value); * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return null if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */ public class Solution { public NestedInteger deserialize(String s) { if (s.equals("")) { return new NestedInteger(); } if (s.startsWith("[")) { return impl(s.substring(1, s.length()-1)); } return new NestedInteger(Integer.parseInt(s)); } private NestedInteger impl(String s) { if (s.equals("")) { return new NestedInteger(); } char [] chList = s.toCharArray(); int wrap = 0; int left = 0; NestedInteger ret = new NestedInteger(); for (int i = 0; i < chList.length; i++) { if (chList[i] == '[') { wrap++; } else if (chList[i] == ']') { wrap--; } else if (chList[i] == ',' && wrap == 0) { ret.add(deserialize(s.substring(left, i))); left = i + 1; } } ret.add(deserialize(s.substring(left, chList.length))); return ret; } }