/** * // 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 getList(); * } */ class Solution { public NestedInteger deserialize(String s) { Stack stack = new Stack<>(); int l = 0; int r = 0; int n = s.length(); if(n == 0) return new NestedInteger(); //special case if(s.charAt(0) != '[') return new NestedInteger(Integer.valueOf(s)); NestedInteger curr = null; for ( r = 0; r < s.length(); r++) { char ch = s.charAt(r); if (ch == '[') { if (curr != null) { stack.push(curr); } curr = new NestedInteger(); l = r+1; } else if (ch == ']') { String num = s.substring(l, r); if (!num.isEmpty()) curr.add(new NestedInteger(Integer.valueOf(num))); if (!stack.isEmpty()) { NestedInteger pop = stack.pop(); pop.add(curr); curr = pop; } l = r+1; } else if (ch == ',') { if (s.charAt(r-1) != ']') { String num = s.substring(l, r); curr.add(new NestedInteger(Integer.valueOf(num))); } l = r+1; } } return curr; } }