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

【LeetCode】【算法】394. 字符串解码

LeetCode 394. 字符串解码

题目描述

给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

思路

思路:参考的题解字符串解码(辅助栈法 / 递归法,清晰图解)
在这个题解中的变量包括res临时存储字符串,multi临时存储数值,stack_multi作为辅助栈存储数值,stack_res作为辅助栈存储字符串,在这个算法中,规则为:

  1. 假如遇到了数字,更新multi=10*multi+Integer.parse(c+””);
  2. 假如遇到了字符,更新res=res.append(c)
  3. 假如遇到了[,将multires中的内容入栈:multi.push(multi), res.push(res)并做清空multi=0, res=new StringBuilder()
  4. 假如遇到了],将stack_multistack_res中的内容出栈,得到目前的结果写入res中。实际上就是res=last_res+last_multi*res,即有:
    I. Integer m = stack_multi.pop(); String r = stack_res.pop()
    II. 根据值m和当前res中的内容,利用for循环组成字符串for(int i=0;i<m;i++) tmp.append(res)
    III. res=r+tmp

代码

class Solution {public String decodeString(String s) {StringBuilder res = new StringBuilder();int multi = 0;// 两个辅助栈,一个存数字,一个存字符串Deque<Integer> stack_multi = new ArrayDeque<>();Deque<String> stack_res = new ArrayDeque<>();for (char c : s.toCharArray()) {if (c == '['){ // 如果等于左括号,将res和multi入栈中stack_multi.push(multi);stack_res.push(res.toString());multi = 0;res = new StringBuilder();} else if (c == ']') { // 如果等于右括号,当前结果=last_res+last_multi*resInteger last_multi = stack_multi.pop();String last_res = stack_res.pop();StringBuilder tmp = new StringBuilder();for (int i = 0; i < last_multi; i++) tmp.append(res);res = new StringBuilder(last_res + tmp);}else if (c >= '0' && c <= '9') multi = multi * 10 + Integer.parseInt(c + "");else res.append(c);}return res.toString();}
}
http://www.lryc.cn/news/478785.html

相关文章:

  • 最新整理:Selenium自动化测试面试题
  • 外包干了2年,快要废了。。。
  • 乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列
  • HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,静态路由,环回,缺省,空接口,NAT
  • Apple提出MM1.5:多模态大型语言模型微调的方法、分析和见解_mm1.5 模型下载
  • 【毫米波雷达(三)】汽车控制器启动流程——BootLoader
  • AI 搜索来势汹汹,互联网将被颠覆还是进化?
  • 《二分查找算法:在有序数组中搜索目标值》
  • 【万字总结】数据结构常考应用大题做法画法详解_树_哈希表_图_排序大总结
  • Docker + Jenkins + gitee 实现CICD环境搭建
  • rabbitMq怎么保证消息不丢失?消费者没有接收到消息怎么处理
  • 商务数据分析在提升客户体验方面的作用体现在哪些环节
  • cooladmin使用整理
  • CentOS 7 更换软件仓库
  • 现代Web开发:React Hooks深入解析
  • HarmonyOS使用arkTS拉起指定第三方应用程序
  • flex安装学习笔记
  • 09-结构化搜索、搜索的相关性算分
  • 手机屏幕上进行OCR识别方案
  • 遗传算法与深度学习实战(22)——使用Numpy构建神经网络
  • react->Antd->Table调整checkbox默认样式
  • 一种ESB的设计
  • 上位机常用通信方式
  • Vue3中使用LogicFlow实现简单流程图
  • 《重学Java设计模式》之 工厂方法模式
  • 【大数据学习 | kafka】kafka的数据存储结构
  • 知识竞赛答题系统,线上答题小程序链接怎么做?
  • 基于SSM的社区物业管理系统+LW参考示例
  • android——jetpack startup初始化框架
  • 英伟达HOVER——用于人形机器人的多功能全身控制器:整合不同的控制模式且实现彼此之间的无缝切换