当前位置: 首页 > article >正文

【leetcode hot 100 394】字符串解码

解法一:一个栈用于存数字,一个栈用于存需要copy多次的String。

class Solution {
    public String decodeString(String s) {
        StringBuffer result = new StringBuffer();
        Deque<String> stackString = new LinkedList<>();
        Deque<Integer> stackInteger = new LinkedList<>();
        int num = 0;

        for (Character ch : s.toCharArray()) {
            if (ch >= '0' && ch <= '9') {
                num = num * 10 + (int) (ch - '0');  // 处理100的数
            } else if (ch == '[') {
                stackString.push(result.toString()); // 不能直接加,要进行toString操作
                stackInteger.push(num);
                result = new StringBuffer();
                num = 0;
            } else if (ch == ']') {
                StringBuffer temp = new StringBuffer();
                int copy = stackInteger.pop();
                for (int i = 0; i < copy; i++) {
                    temp.append(result); // 这里要重新申请temp,不能result自加,容易加多
                }
                result = new StringBuffer(stackString.pop() + temp); // 要new不能重新赋值,只有append操作
            } else {
                result.append(ch);
            }
        }
        return result.toString();
    }
}

注意:

  • 入栈的时候不能直接加,要进行toString操作:stackString.push(result.toString())
  • 复制result的时候,要重新申请temp,不能result自加,容易加多: temp.append(result)
  • result进行赋值时,要new不能重新赋值,StringBuffer只有append操作: result = new StringBuffer(stackString.pop() + temp)
  • 处理上10的数,如100:num = num * 10 + (int) (ch - '0')
原文地址:https://blog.csdn.net/weixin_47894469/article/details/146513313
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/600830.html

相关文章:

  • 【ARM】MDK-解决单机版LIC获取报错
  • 05、Tools
  • JupyterLab 导出中文 PDF 方案
  • 《算法笔记》9.6小节 数据结构专题(2)并查集 问题 D: More is better
  • 特殊行车记录仪DAT视频丢失的恢复方法
  • 日志截断/日志中途清空/不停止程序
  • PLC物联网网关是什么?PLC网关应用场景
  • 程序化广告行业(32/89):常见广告位类型深度剖析
  • 106.在 Vue3 中使用 OpenLayers 动态添加 Layer 到 LayerGroup,并动态删除
  • 第 5 章 | Solidity 合约中的整数溢出与精度陷阱全解析
  • 笔记整理三
  • 开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(五)
  • 最大连续子序列和(动态规划 -- 经典Kadane算法)
  • 可视化工程项目管理软件:让复杂工程数据一目了然
  • rabbitmq承接MES客户端服务器
  • sourcetree中的“master“,“origin/master“,“origin/HEAD“这三个图标都是什么意思?GIT 超详细➕通俗易懂版本
  • influxdb在centOS stream 9安装教程
  • 3、孪生网络/连体网络(Siamese Network)
  • <KeepAlive>和<keep-alive>有什么区别
  • 基于51单片机的多点位水位监测proteus仿真