385. Mini Parser

括号题一般都是stack..

一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力。

后来猛然发现其实可以直接吧NestedInteger作为Object放入Stack里。

这种直接往堆顶元素里放的办法一定要注意。

然后就是edge cases多得一逼,一定要仔细,看了一刷的答案做的,有点后悔。其实有时候觉得麻烦的时候,基本就是思路错了,这个题也是看到一半觉得麻烦,然后发现果然思路错了。

public class Solution 
{
    public NestedInteger deserialize(String s) 
    {
        if(s.length() == 0) return new NestedInteger();
        
        Stack<NestedInteger> stk  = new Stack<NestedInteger>();
        int tempIndex = 0;
        if(!s.contains("[")) return new NestedInteger(Integer.valueOf(s));
        
        for(int i = 0; i < s.length();i++)
        {
            char tempCh = s.charAt(i);
            if(tempCh == '[')
            {
                stk.push(new NestedInteger());
                tempIndex = i + 1;
            }
            else if(tempCh == ',')
            {
                if( i != tempIndex)
                {
                    int tempInt = Integer.valueOf(s.substring(tempIndex,i));
                    stk.peek().add(new NestedInteger(tempInt));
                }
                
                
                tempIndex = i + 1;
                
                
            }
            else if(tempCh == ']')
            {
                if( i != tempIndex)
                {
                    int tempInt = Integer.valueOf(s.substring(tempIndex,i));
                    stk.peek().add(new NestedInteger(tempInt));
                }
                
                tempIndex = i + 1;
                
                NestedInteger tempOB = stk.pop();
                if(!stk.isEmpty()) stk.peek().add(tempOB);
                else stk.push(tempOB);
                
                
                
            }
            // numbers
            else
            {
                
            }

            
        }
        
        
        return stk.pop();
        
    }
}

P.S. 有道云笔记各种崩溃,今天崩溃100次了,好像跟ALT有关。

原文地址:https://www.cnblogs.com/reboot329/p/5875868.html