leetcode 394. 字符串解码

leetcode 394. 字符串解码
主要思路是用两个栈,一个数字栈,一个字符串栈,把数字放入数字栈中,把左括号和字母放到字符串栈中(左括号主要为了处理括号嵌套情况)

class Solution {
    public static String decodeString(String s) {
        Deque<Integer> numStack=new LinkedList<>();
        Deque<String> strStack=new LinkedList<>();
        StringBuffer numBuffer=new StringBuffer();//数字栈
        StringBuffer strBuffer=new StringBuffer();//字符串栈
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)>=48&&s.charAt(i)<=57){
                numBuffer.append(s.charAt(i));
                if(strBuffer.length()>0){
                    strStack.offerFirst(strBuffer.toString());
                    strBuffer.setLength(0);
                }
            }else if(s.charAt(i)>=97&&s.charAt(i)<=122){
                strBuffer.append(s.charAt(i));
            }else if(s.charAt(i)=='['){
                if(numBuffer.length()>0){
                    int num=Integer.valueOf(numBuffer.toString());
                    numStack.offerFirst(num);
                    numBuffer.setLength(0);
                }
                if(strBuffer.length()>0){
                    strStack.offerFirst(strBuffer.toString());
                    strBuffer.setLength(0);
                }
                strStack.offerFirst("[");
            }else if(s.charAt(i)==']'){
                if(strBuffer.length()>0){
                    strStack.offerFirst(strBuffer.toString());
                    strBuffer.setLength(0);
                }
                int num2=numStack.pollFirst();
                StringBuffer t=new StringBuffer();//拼接栈中[括号以前的
                StringBuffer t2=new StringBuffer();//存放翻倍的字符串

                while(!"[".equals(strStack.peekFirst())){
                    String t3=strStack.pollFirst();
                    t.insert(0,t3);
                }
                while(num2>0){
                    t2.append(t.toString());
                    num2--;
                }
                strStack.pollFirst();//再弹出[
                strStack.offerFirst(t2.toString());
            }
        }
        StringBuffer res=new StringBuffer();
        while (!strStack.isEmpty()){
            res.append(strStack.pollLast());
        }
        if(strBuffer.length()>0){
            res.append(strBuffer.toString());
        }
        return res.toString();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值