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

力扣HOT100之栈:394. 字符串解码


这道题又是栈的经典应用,之前拼多多笔试遇到过类似的题目。这回碰到了依旧不会,看完华南溜达虎的视频以后才做出来,感觉这个题目还挺高频的,这次好好记录一下思路。
我们主要使用到一个存储字符串变量的栈stack<string> st,用一个for循环来遍历字符串s中的所有的字符,如果当前字符不是],则持续将当前遍历到的字符添加到st中(由于字符是无法添加到存储字符串的栈中的,因此这里需要将单个字符转换为字符串再压入栈中),如果遇到了],则我们需要进行进一步的处理,首先,题目保证所有的输入都是合法的,因此我们可以断定,在遍历到]之前,st中已经存储了与之匹配的[,我们先将[之后加入的字母全都弹出,并用一个字符串temp接收,在接收完毕后,此时栈顶元素一定为[,我们将其弹出,接下来就是数字部分,注意,字符串中的数字可能不止一位,可能会出现11[a12[c]]这种状况,所以我们需要持续地对栈顶元素进行判断,通过调用C++的isdigit函数来判断当前遍历到的字符串是否为数字字符,同样,我们也用一个字符串变量num来接收所有的数字,拼接成正确的形式,然后我们直接调用stoi()num转换成对应的整形变量,在得到了重复次数num和需要重复的字符串temp后,我们直接使用一个while循环将temp重复num次,然后将其再次压入栈中。
注意,以上的操作是针对字符串中出现[]的情形,我们需要将形如x[str]的形式将其转换成strstrstr...的形式,因此我们需要将栈中对应的中括号和数字弹出并正确处理后,将其压入栈中,以便于后续最终结果的拼接。
在遍历完所有字符后,我们将st中的字符串拼接起来即可。

class Solution {
public:string decodeString(string s) {string result;stack<string> st;for(char c : s){if(c != ']'){   //只要没遇到']'就一直压入栈中string temp;temp += c;st.push(temp);}else{string temp;while(st.top() != "["){temp = st.top() + temp;st.pop();}st.pop();   //弹出[string num;while(!st.empty() && isdigit(st.top()[0])){  //记录重复次数num = st.top()[0] + num;st.pop();} int count = stoi(num);string str;while(count > 0){str += temp;count--;}st.push(str);}}while(!st.empty()){result = st.top() + result;st.pop();}return result;}
};
http://www.xdnf.cn/news/944209.html

相关文章:

  • 256bps!卫星物联网极低码率语音压缩算法V3.0发布!
  • docker容器保存为不依赖基础镜像的独立镜像方法
  • 【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
  • 深入剖析AI大模型:大模型时代的 Prompt 工程全解析
  • Jenkins自动发布C# EXE执行程序
  • Unity中的对象池ObjPool/PoolManager
  • 安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
  • 基于Python的气象数据分析及可视化研究
  • Python打卡训练营学习记录Day49
  • C++11智能指针
  • Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
  • 虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
  • Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
  • 使用 C# 将 Word、Excel、PDF 和 PPT文档转换为 Markdown 格式
  • 《C++初阶之入门基础》【普通引用 + 常量引用 + 内联函数 + nullptr】
  • 【BUG】记STM32F030多通道ADC DMA读取乱序问题
  • 2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
  • 曲面的存在性定理
  • 【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
  • 【医疗电子技术】新型医疗电子和医学人工智能发展现状和趋势
  • 【异常】极端事件的概率衰减方式(指数幂律衰减)
  • 漏洞检测方案如何选工具?开源与商业工具适用环境大不同
  • 【时序预测】-Transformer系列
  • Hibernate Validator 数据验证
  • pymongo配置事务环境并封装事务功能
  • JDBC基础关键_001_认识
  • Spring类型转换器相关接口和实现原理
  • 【JavaScript】利用`localStorage`实现多窗口数据交互同步【附完整源码】
  • OD 算法题 B卷【删除字符串中出现次数最少的字符】
  • 如何禁用windows server系统自动更新并防止自动重启