71、栈-字符串解码

 思路:

3[a]==>aaa

3[a2[c]]===>3[a cc]===>acc acc acc

由上面两个例子可以看出,当遇到[的时候可以先不结算,当遇到 ]的时候结算,结算左侧最近的右括号[。然后继续遍历。这个也是使用栈的思想。可以使用两个栈一个用于存储字符的栈 (strStack) 和一个用于存储重复次数的栈 (numStack)。

代码如下:

class Solution {
    public static String decodeString(String s) {
        if (s == null || s.isEmpty()) {
            return ""; // 如果输入为空,则直接返回空字符串
        }
        Stack<StringBuilder> strStack = new Stack<>(); // 用于存储字符串状态的栈
        Stack<Integer> numStack = new Stack<>(); // 用于存储重复次数的栈
        int k = 0; // 用于构建当前读取到的数字,即重复次数
        StringBuilder cur = new StringBuilder(); // 当前操作的StringBuilder

        for (char ch : s.toCharArray()) {
            if (Character.isDigit(ch)) {
                k = k * 10 + (ch - '0'); // 处理数字,构建完整的重复次数
            } else if (ch == '[') {
                numStack.push(k); // 将当前重复次数压入栈
                strStack.push(new StringBuilder(cur)); // 将当前字符串压入栈
                k = 0; // 重置重复次数
                cur = new StringBuilder(); // 重置当前字符串
            } else if (ch == ']') {
                StringBuilder temp = cur; // 保存当前构建的字符串
                cur = strStack.pop(); // 从栈中弹出前一个字符串状态
                for (int i = numStack.pop(); i > 0; i--) { // 根据次数重复添加字符串
                    cur.append(temp);
                }
            } else {
                cur.append(ch); // 直接向StringBuilder追加非特殊字符
            }
        }
        return cur.toString(); // 将最终的StringBuilder转为字符串并返回
    }
}

相关推荐

  1. 【LeetCode热题100】394. 字符串解码

    2024-04-30 06:18:02       52 阅读
  2. LeetCode75| 单调

    2024-04-30 06:18:02       68 阅读
  3. 字符串匹配问题(strs)(

    2024-04-30 06:18:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 06:18:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 06:18:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 06:18:02       87 阅读
  4. Python语言-面向对象

    2024-04-30 06:18:02       96 阅读

热门阅读

  1. 将后端返回的正则字符串转为正则对象

    2024-04-30 06:18:02       31 阅读
  2. MongoDB聚合运算符:$size

    2024-04-30 06:18:02       34 阅读
  3. Hadoop 伪分布式安装

    2024-04-30 06:18:02       39 阅读
  4. 云计算中的网络服务

    2024-04-30 06:18:02       36 阅读
  5. CentOS 常见的命令

    2024-04-30 06:18:02       37 阅读
  6. Circuits--Sequential--Finite6

    2024-04-30 06:18:02       33 阅读