394. 字符串解码

package leetcode;

import java.util.Stack;

public class demo_394 {
    public String decodeString(String s) {
        StringBuffer sb=new StringBuffer();
        StringBuffer sb1;
        StringBuffer sb2;
        //存储字符串
        Stack<StringBuffer> stack=new Stack<StringBuffer>();
        //存储数字
        Stack<Integer> num=new Stack<Integer>();
        int i=0;
        while(i<s.length()) {
            sb1=new StringBuffer("");
            sb2=new StringBuffer("");
            if(s.charAt(i)=='[') {
                stack.push(new StringBuffer().append('['));
                i=i+1;
                continue;
            }
            if(s.charAt(i)==']') {
                //取出栈中数据
                while(!stack.peek().toString().equals("[")) {
                    sb1.insert(0,stack.pop());
                }
                stack.pop();
                //判断需要执行的次数
                int nums=1;
                if(!num.isEmpty()) {
                    nums=num.pop();
                }
                //再次放入栈中
                for(int j=1;j<=nums;j++) {
                    sb2.append(sb1);
                }
                stack.push(sb2);
                i=i+1;
                continue;
            }
            //统计当前数字的大小
            while(i<s.length()&&s.charAt(i)-'0'>=0&&s.charAt(i)-'0'<=9) {
                sb1.append(s.charAt(i));
                i++;
            }
            //将数字放入栈中
            if(sb1.length()!=0) {
                int n=Integer.valueOf(sb1.toString());
                num.push(n);
                continue;
            }
            //统计连续字符串
            while(i<s.length()&&s.charAt(i)>='a'&&s.charAt(i)<='z') {
                sb2.append(s.charAt(i));
                i++;
            }
            //将字符串放入栈中
            if(sb2.length()!=0) {
                stack.push(sb2);
                continue;
            }
        }
        //从栈中取出数据,避免出现乱序,在头部插入
        while(!stack.isEmpty()) {
            sb.insert(0, stack.pop());
        }
        System.out.println(sb.toString());
        return sb.toString();
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_394 demo=new demo_394();
        demo.decodeString("100[leetcode]");
    }

}

 

posted on 2022-05-03 15:07  一仟零一夜丶  阅读(37)  评论(0)    收藏  举报