【LeetCode 75】第二十六题(394)字符串解码

目录

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

给我们字符串,让我们解码,那么该怎么解码呢,被括号【】包裹起来的字符串需要扩展成括号左边第一个数字(可能不止一位数)倍,例如 3【a】需要变成 aaa。

我们可以发现,如果发现括号嵌套(括号里还有括号),那么我们应该先算最里面的括号,这样解码才是正确的,换一个说法,我们应该先解码左括号更后面出现的,这就算是先进后出,后进先出了,不难想到可以利用栈的特性来做。

先遍历字符串,我们直接将非右括号的字符全部入栈,直到遇到了右括号才开始解码。

遇到右括号之后一直取栈顶元素直到碰到左括号,这样我们就算是把需要扩展的字符串拿到手了。

接着我们需要拿到扩展字符串的次数,因为题目说扩展次数最多是300次,因此我们不能只取左括号左边的一位数字,而需要一直取数直到栈空或是碰到了非数字。

然后得到扩展的字符串和扩展次数以后,将扩展后的字符串再依次入栈。

如此循环,即可得到解码后的字符串了。

代码+运行结果:

cpp 复制代码
class Solution {
public:
    string decodeString(string s) {
        vector<char>Stack;
        for(char &c:s){
            if(c==']'){ //如果碰到右括号,那么开始寻找是哪些字符串需要解码
                string tempstr="";
                while((*(Stack.end()-1))!='['){ //获取括号内的字符串
                    tempstr=(*(Stack.end()-1))+tempstr; 
                    Stack.pop_back();
                }
                Stack.pop_back();   //将左括号[弹出
                int times=0;int beishu=0;   //获取重复次数
                while(!Stack.empty()&&isdigit(*(Stack.end()-1))){
                    times+=(pow(10,beishu++)*(static_cast<int>((*(Stack.end()-1)-'0'))));
                    Stack.pop_back();
                }  
                //开始解码字符串(重复字符串)
                for(int i=0;i<times;i++){
                    for(char &t:tempstr){
                        Stack.push_back(t);
                    }
                }
            }else{  //除了右括号以外的其他符号都入栈
                Stack.push_back(c);
            }
        }
        string res="";
        //拼接最终结果
        for(char &c:Stack) res+=c;
        return res;
    }
};
相关推荐
小豆庄10 分钟前
Mac 上给视频人脸打码:本地工具的依赖、追踪与推理管线
算法·视觉检测·视频·敏捷流程·纹理贴图
星夜离尘5627 分钟前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
careathers1 小时前
【数据结构】从堆到 PriorityQueue:手写一个优先级队列
数据结构
y1su3 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan3 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
syagain_zsx4 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼4 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机4 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划
RaaS1004 小时前
Agent Skills 进了 Linux Foundation:2.8 亿次安装,但装 skill 还没有安全规范
人工智能·算法·架构
CV爱数码4 小时前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct