Leetcode 394-字符串解码

devtools/2024/12/26 8:13:28/

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
在这里插入图片描述
在这里插入图片描述

题解

辅助栈法

一、一个栈存储数字,一个存储字符串

二、从左到右遍历每个字符,分四种情况:

1.数字
对于数字,要注意题目条件:s 中所有整数的取值范围为 [1, 300] ,也就是数字有可能是不止一位的,数字结束的标志是遇到[
2.左括号[
遍历到左括号,我们让当前字符串curString和当前数字curNum分别入自己的栈。
同时让它们回归初始值""和0
3.右括号]
遍历到右括号,那就可以进行解码操作了。
具体而言,就是弹出数字栈的元素,作为要循环的次数num,弹出字符串栈的元素tmp,在tmp后面拼接num个curString
最后将curString置为tmp
4.字符
如果是字符,直接拼接在当前字符串后面

三、返回值

curString

class Solution {public String decodeString(String s) {Stack<Integer> numStack = new Stack<>();Stack<String> strStack = new Stack<>();String curString="";int cuNum=0;for(int i=0;i<s.length();i++){char c=s.charAt(i);//1.c是数字//要考虑数字为两位数或者三位数的情况if(c<='9'&&c>='0') cuNum=cuNum*10+c-'0';//2.c是左括号//此时将curString和curNum都入栈else if(c=='['){numStack.push(cuNum);strStack.push(curString);cuNum=0;curString="";} //3.c是右括号//开始计算else if(c==']'){int num=numStack.pop();String tmp=strStack.pop();//注意这块是>0而不是>=0while(num>0){tmp+=curString;num--;}curString=tmp;}else{//此时c为字符curString+=c;}}return curString;}
}

http://www.ppmy.cn/devtools/145484.html

相关文章

JVM简介—垃圾回收器和内存分配策略

1.垃圾回收概述 2.如何判断对象存活 (1)引用计数算法 给对象添加一个引用计数器&#xff0c;每当一个地方引用它时就将计数器加1&#xff0c;当引用失效时就将计数器减1&#xff0c;任何时刻计数器为0的对象都不再被使用。 这种算法简单&#xff0c;但是有个致命的缺点&#xf…

AI领域年度精彩报告┆国家优青马超教授:自动驾驶多模态场景理解与生成

本文为马超教授在2024年中国图象图形学学会青年科学家会议中所作的精彩报告《自动驾驶多模态场景理解与生成》的节选&#xff0c;经马老师同意后分享给读者&#xff0c;文中所有材料已经取得作者授权。 1.报告嘉宾介绍 马超&#xff0c;上海交通大学人工智能研究院教授&#x…

怎么将PDF压缩大小?PDF文件进行压缩的几个方法推荐

怎么将PDF压缩大小&#xff1f;一个包含复杂排版和高清图像的PDF文件&#xff0c;在传输过程中往往因文件过大而难以发送&#xff0c;尤其是在电子邮件附件有大小限制的情况下&#xff0c;或者当需要通过云服务分享时&#xff0c;过大的文件会消耗过多的网络带宽和存储空间&…

vue3入门教程:ref能否完全替代reactive?

1. 使用场景与数据类型 ref&#xff1a; 主要用于基本数据类型&#xff08;如String、Number、Boolean等&#xff09;。也可以用于对象/数组&#xff0c;但需要通过.value访问。适合单个响应式数据的管理。 reactive&#xff1a; 主要用于对象类型&#xff08;如Object、Array…

【C++】初识C++之C语言加入光荣的进化(上)

写在前面 本篇笔记作为C的开篇笔记&#xff0c;主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性&#xff0c;当然C是兼容C的&#xff0c;我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…

常见问题解决方案:Keen CommonWeb 开源项目

常见问题解决方案&#xff1a;Keen CommonWeb 开源项目 common-web Turn web user activity into a analyzable stream of JSON event data [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/co/common-web 一、项目基础介绍 Keen CommonWeb 是一个开源的 JavaScr…

nginx-代理服务

目录 相关指令 相关模块 安装新模块proxy_pass指令 案例 proxy_set_header指令 案例 被代理服务器配置 代理服务器配置 proxy_redirect指令 案例 服务端配置 代理服务器配置 正向代理 需求分析 环境准备 配置 主机配置 服务器配置 主配置文件 web文件配置 …

数据分析的分类和EDIT思维框架

为了服务于企业不同层次的决策&#xff0c;商业数据分析过程需要提供相应的数据科学产出物。 一般而言&#xff0c;数据分析需要经历从需求层、数据层、分析层到输出层四个阶段。 第一个阶段是需求层——确定目标&#xff0c;具体目标需要依据具体的层次进行分析&#xff1a…