leetcode-394.字符串解码

394. 字符串解码

public String decodeString(String s) {
        Stack<Character> stack = new Stack<>();
        for(char c : s.toCharArray()){
            if(c != ']'){//如果不是']'把所有字符加入
                stack.push(c);
            }else{// 如果遇到']'说明 c[letter以及全部输入到栈中了
                StringBuilder sb = new StringBuilder();
                while(!stack.isEmpty() && Character.isLetter(stack.peek())){//如果遇到了']',则把栈里所有 字符 都插入到sb中
                    sb.insert(0, stack.pop());
                }
                String letters = sb.toString();//sb转成字符串
                
                stack.pop(); // 去除'['
                
                sb = new StringBuilder();//重置StringBuilder准备记录数字
                while(!stack.isEmpty() && Character.isDigit(stack.peek())){//如果遇到了数字,则记录数字,别忘了数字有位数,个位十位百位千位,不只是一位数字,所有数字都加入到sb中
                    sb.insert(0, stack.pop());
                }
                int count = Integer.valueOf(sb.toString());//把字符串转换为整数

                //根据count次数,拆除[],再塞入到栈里去,由于stack只能放char字符,所以这里都拆成字符一个个放进去
                while(count != 0){
                    for(char r : letters.toCharArray()){
                        stack.push(r);
                    }
                    count --;
                }
            }
        }
        StringBuilder res = new StringBuilder();
        //取出栈中所有字符
        while(!stack.isEmpty()){
            res.insert(0, stack.pop());
        }
        return res.toString();
    }

posted on 2022-10-11 13:33  老菜农  阅读(10)  评论(0编辑  收藏  举报

导航