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

leetcode 394 字符串解码

目录

一、题目描述

二、解题思路

整体思路

具体思路

模拟过程

思路提取

三、代码实现

一、题目描述

二、解题思路

整体思路

本题是一个典型的字符串解码问题,由于存在括号,有后进先出的特性,所以我们可以用双栈模拟来解决这个问题。

具体思路

模拟过程

s="3[a2[c]]de"为例子来模拟这个过程:

(1)定义两个栈,栈number用于记录数字,栈St用于记录字符串,向St栈中压入空字符串(防止出现s='a......'这种情况),此时两个栈的状态如下:

(2)遍历字符串s:

<1>此时,s[current]为数字字符,就将这个数提取出来,并压入number栈。此时栈的状态如下:

<2>此时,是'[',就向栈中压入一个空字符串。此时栈的状态如下:

<3>此时,为普通字符,就追加到栈顶元素的后面。此时栈的状态如下:

<4>此时,s[current]为数字字符,就将这个数提取出来,并压入number栈。此时栈的状态如下:

<5>此时,是'[c',就向栈中压入一个空字符串,将"c"加入栈顶字符串的后面。此时栈的状态如下:

<6>此时,是']',提取number和St的栈顶元素(弹出)进行解码,将解码的结果加入此时栈的栈顶元素的后面。栈的状态如下:

<7>此时,是']',提取number和St的栈顶元素(弹出)进行解码,将解码的结果加入此时栈的栈顶元素的后面。栈的状态如下:

<7>此时,为普通字符,就追加到栈顶元素的后面。此时栈的状态如下:

s遍历完毕,此时St的栈顶字符串即为解码后的字符串,即为所求。

思路提取

利用双栈进行解码,遍历字符串s:

(1)如果为数字字符,就将数字提取出来,压入number栈;

(2)如果为'[',就向St栈中压入一个空字符串;

(3)如果为']',就弹出St和number的栈顶元素进行解码,将解码后的字符串追加到当前St栈的栈顶字符串的后面;

(4)如果为小写字母,就直接追加到St栈顶字符串的后面;

s遍历完后,St的栈顶字符串即为解码完成的字符串。

三、代码实现

class Solution {
public:string decodeString(string s) {//双栈模拟stack<int> number;stack<string> St;St.push("");//加入空字符串int n=s.size();int current=0;while(current<n){//如果为数字字符(提取)if(s[current]>='0'&&s[current]<='9'){int tmp=0;while(s[current]>='0'&&s[current]<='9'&&current<n){tmp*=10;tmp+=s[current++]-'0';}number.push(tmp);}//如果为'[',压入空字符串else if(s[current]=='['&&current<n){St.push("");current++;}//如果为']',解码else if(s[current]==']'&&current<n){string tmp=St.top();St.pop();int num=number.top();number.pop();string repeated="";for(int i=0;i!=num;i++)repeated+=tmp;St.top()+=repeated;current++;}//处理普通字符else if(s[current]<='z'&&s[current]>='a'&&current<n){St.top()+=s[current++];}}return St.top();}
};

http://www.dtcms.com/a/609905.html

相关文章:

  • 如何做充值网站seo模拟点击软件源码
  • 好看的旅游网站模板下载镇江百度推广公司
  • 智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
  • Android thermal (7)_thermal core
  • 网站的维护费用售后服务网站建设
  • Databend SQL nom Parser 性能优化
  • wordpress的标签页网站seo竞争分析工具
  • Clip模型与Vit模型的区别?
  • 前端 CSS selector
  • 《嵌入式开发硬核指南:91问一次讲透底层到架构》
  • 贵阳市网站建设wordpress改为邮箱验证注册
  • 深入解析与应用:Delphi-2M 健康轨迹预测模型的开源实践与研究(下)
  • 可信网站值得做吗网站中怎么做下载链接
  • 在 UniApp 中为小程序实现视频播放记录功能
  • 嗑一下Vue3 生态新插件
  • 31、【Ubuntu】【远程开发】内网穿透:反向隧道建立(三)
  • ubuntu20.04下使用D435i实时运行ORB-SLAM3
  • 网站建设哪便宜wordpress建手机版6
  • 东莞如何搭建网站建设wordpress视频压缩
  • Rust 宏:深入理解与高效使用
  • 基于异质专家协同一致性学习的弱监督红外 - 可见光行人重识别
  • 挂载配置文件以Docker启动Redis服务
  • 网站被墙怎么做跳转深圳龙岗个人网站建设
  • 标准输入输出stdio和JSON-RPC
  • 免费seo网站推荐一下软件手机网站建立教程
  • 有哪些网站可以用常州小程序开发报价
  • Python自动化浏览器操作与定时任务实战指南
  • web中国民族文化展示网站4页面
  • 【剑斩OFFER】算法的暴力美学——【模板】前缀和
  • php网站建设考试新品发布会的作用