leetcode 394. 字符串解码

news/2024/11/20 11:37:54/

感觉糊里糊涂的AC了,感觉还要二刷。。。
题目链接leetcode 394

1.题目

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

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

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

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

2.示例

1)示例 1:
输入:s = “3[a]2[bc]”
输出:“aaabcbc”

2)示例 2:
输入:s = “3[a2[c]]”
输出:“accaccacc”

3)示例 3:
输入:s = “2[abc]3[cd]ef”
输出:“abcabccdcdcdef”

4)示例 4:
输入:s = “abc3[cd]xyz”
输出:“abccdcdcdxyz”

5)提示:
1 <= s.length <= 30
s 由小写英文字母、数字和方括号 ‘[]’ 组成
s 保证是一个 有效 的输入。
s 中所有整数的取值范围为 [1, 300]

3.分析

我觉得是一个栈+递归的问题,
1)首先从栈的角度出发,算是括号匹配的加强版,基础思路还是当字符是’[‘时候就入栈,遇到第一个’]‘时候就出栈,此时这个’]‘与栈顶是匹配的。
2)我们考虑一个字符串被定义为k[encoded_string],但是里面的encoded_string也可以是“普通字符串”+k[encoded_string]+“普通字符串”(这里的普通字符串定义为不含中括号和数字的字符串)
3)那么我们的目标转化为去寻找与第一个’[‘匹配的’]',所以当当前字符为‘]’并且pop后栈为空,那么s[栈顶+1:i]这一部分就是encoded_string了
4)当当前字符为小写英文字母时,栈又为空,说明他们时普通字符,直接在字符串后+即可

4.代码

class Solution {
public:string decodeString(string s){stack<int> st;map<int,int> num;int cnt=0;string ans="";for(int i=0;i<s.size();i++){if(s[i]>='0'&&s[i]<='9')cnt=cnt*10+s[i]-'0';if(s[i]=='['){st.push(i);num[i]=cnt;cnt=0;flag=false;}if(s[i]==']'){int top=st.top();st.pop();if(st.empty()){string ans1=decodeString(s.substr(top+1,(i-top+1-2)));for(int j=0;j<num[top];j++)ans+=ans1;cnt=0;}}if(s[i]>='a'&&s[i]<='z'&&st.empty()) ans+=s[i];}return ans;}
};

http://www.ppmy.cn/news/98478.html

相关文章

HTML基础标签

目录 1.HTML作用 2.HTML 文件基本结构 3.标签层次结构 4.HTML常见标签 标题标签: h1-h6 段落标签: p 换行标签: br 格式化标签 图片标签: img 格式化标签 示例代码&#xff1a; img 标签的其他属性 超链接标签: a 链接的几种形式: 表格标签 列表标签 表单标签 …

中文核心论文写作经验总结和工具推荐

中文核心论文写作经验总结和工具推荐 1 写作问题案例及解决方法1.1 方法介绍部分冗长杂乱1.2 实验结果介绍没有逻辑1.3 文章整体逻辑把握不清1.4 英文过于中式和口水化 2 投稿流程经验3 工具4 总结 1 写作问题案例及解决方法 1.1 方法介绍部分冗长杂乱 自身问题&#xff1a;介…

Sentinel的另外三种流控模式(附代码详细介绍)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式&#xff0c;后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x1f44f;&#…

Rocky9-Linux上安装KVM虚拟机

一、案例环境 使用一台物理机器,安装Rocky9-Linux的64位系统,test01是在宿主机kvm中安装的虚拟机 主机 操作系统 IP地址 主要软件 kvm Centos 7 192.168.100.46 KVM test01 Centos 7 192.168.100.32 虚拟机

vue组件通信----父传子(超详细)

Vue传值 1.父传子 简单描述 父组件是通过props属性给子组件通信的 数据是单向流动 父—>子 (子组件中修改props数据,是无效的,会有一个红色警告) 实现步骤 1.子组件在props中创建一个属性,用于接收父组件传过来的值; 2.父组件 引入子组件–>注册子组件–>引用…

【算法训练(day6)】双指针模板

一.双指针算法的由来和使用场景 通常情况下我们可能会遇到在某些可遍历的集合中寻找满足某种性质的字串或元素。这时候我们采取暴力的思路就会面临多重循环。我们可以利用题目中所给的集合并利用其性质将多重循环降成一重循环。光用语言描述可能不太好理解。接下来看几个双指针…

遥感云大数据在灾害、水体与湿地领域及GPT模型应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

linux系统中通配符与常用转义字符

通配符 在平时我们使用使用linux系统的过程中会遇到忘记文件名称的问题&#xff0c;这时候呢&#xff0c;通配符就发挥它的作用啦。 顾名思义啦&#xff0c;通配符就是用来匹配信息的符号&#xff0c;如何&#xff08;*&#xff09;代表零个或多个字符&#xff0c;&#xff08;…