【栈】394. 字符串解码

  • Post author:
  • Post category:其他




394. 字符串解码



解题思路

  • 构造辅助栈stack 遍历字符串s的每一个字符c
  • 当c为数字的时候 将数字转化为数字multi
  • 当c是字母的时候直接在builder尾部添加c
  • 当c是[ 将Multi 入stack1 builder转换为字符串 入stack2 然后全部初始化
  • 将[之前的临时结果builder 入栈stack2 用来发现对应]之后的拼接操作
  • 记录此前的Multi 发现]之后 获取multi * 字符串
  • 当c是]之后 取出stack2栈顶元素 根据multi 计算重复字符串 最后再次取出栈顶元素字符串 拼接
class Solution {
    public String decodeString(String s) {
// 使用栈结构
        // 字节后端面试题目
        
        StringBuilder builder = new StringBuilder();
        int multi = 0;

        // 创建两个栈
        Stack<Integer> stack1 = new Stack<>();
        Stack<String> stack2 = new Stack<>();

        // 遍历字符串
        for(Character c:s.toCharArray()){
            if(c == '['){
                // 将前面的字符入栈
                // 数字字符进入stack1
                stack1.push(multi);
                // 字符串进入stack2
                stack2.push(builder.toString());// StringBuilder 转换为字符串
                // 之后清空multi 以及builder
                multi = 0;
                builder = new StringBuilder();
            }
            else if(c == ']'){
                
                StringBuilder tmp = new StringBuilder();
                int temp = stack1.peek();// 取出栈顶元素 也就是最后一个进入栈的元素  也就是栈顶元素
                stack1.pop();

                // 将res 全部添加到tmp
                for(int i = 0; i < temp; i++){
                    tmp.append(builder);// 拼接这些字符串
                }

                // 同时将stack2的栈顶元素 拼接tmp

                builder = new StringBuilder(stack2.peek() + tmp);
                stack2.pop();
            }else if(c >= '0' && c <= '9'){
                multi = multi * 10 + Integer.parseInt(c + "");
            }else{
                builder.append(c);
            }
        }

        // res.append(c);

        return builder.toString();
    }
}



版权声明:本文为qq_44653420原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。