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

栈----3.字符串解码

394. 字符串解码 - 力扣(LeetCode)

/**

        k[encoded_string] ---> k个连续的s; encoded_string = k[encoded_string](可嵌套)

        解码规则:

                1.将所有字符压入栈中,直到遇到']' ---> 当前层级的encoded_string读取完毕,开始转换

                2.弹出栈,将弹出的元素拼接,直到遇到'[' ---> 当前层级的encoded_string转化完毕

                3.继续弹出直到栈顶元素不为数字,k读取完毕,重复拼接k次重新入栈 ---> 当前k[encoded_string]转码完毕

                4.继续读取字符串,重复上述流程直到转换完毕为止

*/

class Solution {/**k[encoded_string] ---> k个连续的s; encoded_string = k[encoded_string](可嵌套)解码规则:1.将所有字符压入栈中,直到遇到']' ---> 当前层级的encoded_string读取完毕,开始转换2.弹出栈,将弹出的元素拼接,直到遇到'[' ---> 当前层级的encoded_string转化完毕3.继续弹出直到栈顶元素不为数字,k读取完毕,重复拼接k次重新入栈 ---> 当前k[encoded_string]转码完毕4.继续读取字符串,重复上述流程直到转换完毕为止*/public String decodeString(String s) {//利用栈进行解码Deque<String> stack = new ArrayDeque<>();//开始解码for(char c : s.toCharArray()) {//不为']',将字符入栈if(c != ']') {stack.push(String.valueOf(c));} //遇到']',当前层级的encoded_string读取完毕,开始转换else {//临时保存拼接后的元素StringBuilder tempStr = new StringBuilder();//将元素弹出栈并拼接,直到遇到'['while(!stack.peek().equals("[")) { //代表当前层级的encoded_string转化完毕//弹出元素并进行拼接(新元素拼接到首位)tempStr.insert(0,stack.pop());}stack.pop(); //弹出'['//继续弹出元素,直到不为数字 ---> 读取KStringBuilder repeatCount = new StringBuilder();while(!stack.isEmpty() && Character.isDigit(stack.peek().charAt(0))) { //采用peek,避免弹出不该弹出的元素repeatCount.insert(0,stack.pop());}//得出K,开始重复拼接K次int k =  Integer.parseInt(repeatCount.toString());StringBuilder repeated = new StringBuilder();for(int i = 0; i < k; i++) {repeated.insert(0,tempStr);}//拼接完毕,重新入栈stack.push(repeated.toString());}}//解码完毕,拼接最后结果StringBuilder result = new StringBuilder();while (!stack.isEmpty()) {result.insert(0, stack.pop()); //注意顺序}return result.toString();}
}

http://www.xdnf.cn/news/1191709.html

相关文章:

  • C语言函数精讲:从入门到精通( 指针(5))
  • 秋招Day20 - 微服务 - 概念
  • kafka的消费者负载均衡机制
  • 嵌入式硬件篇---有线串口通信问题
  • OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集
  • IntelliJ IDEA 中左上方未显示项目根目录问题
  • 数据库索引详解:原理、设计原则与应用场景
  • 渲染篇(二):解密Diff算法:如何用“最少的操作”更新UI
  • Word文档转HTML查看器(字体颜色、字体背景、超链接、图片、目录等全部转换为html),统计Word文档段落数量、图片数量、表格数量、列表数量
  • HTML5元素相关补充
  • 小架构step系列26:Spring提供的validator
  • CS231n-2017 Lecture7训练神经网络(二)笔记
  • 三防平板搭载2D扫描头:工业数据采集的革新利器
  • Vue3 学习教程,从入门到精通,Vue3 样式绑定语法详解与案例(17)
  • 零基础 “入坑” Java--- 十四、【练习】图书小系统
  • 一、Spring框架结构组成详解
  • Transformer:颠覆NLP的自注意力革命
  • C++___快速入门(上)
  • 图解网络-小林coding笔记(持续更新)
  • Creating Strings
  • [特殊字符] 嵌入式队列精要指南:数据流的艺术与实战
  • Java学习|黑马笔记|Day23】网络编程、反射、动态代理
  • 【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型
  • MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡
  • 大型微服务项目:听书——12 数据一致性自定义starter封装缓存操作
  • MongoDB数据模型
  • 深度学习(鱼书)day03--神经网络(后两节)
  • 7月26日星期六今日早报简报微语报早读
  • Oracle 误删数据恢复
  • 服务器被网络攻击后该如何进行处理?