LeetCode 394. 字符串解码

2023-09-18 20:05:56

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        使用栈来很好的解决每一个中括号(包含前边的数字)的重复插入问题。

        我们首先创建一个栈,栈中的数据是一个个的键值对{count,ans.size()};分别是当前字符串重复的次数,和当前字符串在ans的其实下标。ans代表的是遍历到当前字符的正确答案。

        当遍历到数字的时候我们将其记录下来(使用count记录)。

        当遍历到 '[' 将此时的count与此时的ans的长度(也就是此时这一小段重复元素的起始位置)给记录到栈中。

        当遍历到 ']' 则开始进行对此时的一对中括号中的数进行操作,然后出栈此时的栈顶元素,因为此时栈顶已经被使用过了。

代码

class Solution 
{
public:
    string decodeString(string s) 
    {
        // 该字符串用来记录我们的最终答案
        string ans;
        // 保存[前的数字
        int count=0;
        // 用来存放{count,ans.size()};
        // 分别是当前字符串重复的次数,和当前字符串在ans的其实下标
        stack<pair<int,int>> st;
        for(auto&ch:s)
        {
            // 若是数字,则进行记录
            if(isdigit(ch))
            {
                count=count*10+ch-'0';
            }
            // 若是'[' 则将此位置和重复数字组成键值对入栈
            else if(ch=='[')
            {
                st.push({count,ans.size()});
                count=0;
            }
            // 若是字母,则直接插入ans
            else if(isalpha(ch))
            {
                ans+=ch;
            }
            // 若是']',则开始进行对此时的一对中括号中的数进行操作
            // 然后出栈记录当前中括号中数据的键值对
            else if(ch==']')
            {
                // n就是该短字符串出现的次数
                int n=st.top().first;
                // 根据起始位置和长度进行截取
                string str=ans.substr(st.top().second,ans.size()-st.top().second);
                // 遍历循环插入
                for(int i=0;i<n-1;i++)
                {
                    ans+=str;
                }
                // 出栈
                st.pop();
            }
        }
        return ans;
    }
};

更多推荐

Wi-Blog 项目拆解(一):Maven项目的创建和常用Dependency配置

前言Maven是一个标准化的java项目管理和构建工具,其关键在于pom.xml文件内容。pom.xml中需要指定项目依赖,Maven会自动下载依赖的包并缓存到本地。对SpringBoot项目来说,其依赖关系大同小异,接下来将以Wi-Blog项目对每个包及其作用进行解析。Parent<parent><groupId>o

DC电源模块具有不同的安装方式和安全规范

BOSHIDADC电源模块具有不同的安装方式和安全规范DC电源模块是将低压直流电转换为需要的输出电压的装置。它们广泛应用于各种领域和行业,如通信、医疗、工业、家用电器等。安装DC电源模块应严格按照相关的安全规范进行,以确保其正常运行和安全使用。DC电源模块的安装方式主要有固定式和可调式两种。固定式DC电源模块的输出电压

Tomcat服务启动失败:java.lang.OutOfMemoryError: Java heap space

具体报错:java.lang.OutOfMemoryError:Javaheapspace报错分析:这个报错表明Java程序运行时内存不足。Tomcat服务在启动时需要占用一定的内存资源,如果分配的内存不足,就会出现该错误。通常情况下,出现该错误的原因是JVM的堆内存大小不足以支持Tomcat服务的启动。报错解决过程:

数据库设计-----理论

1.2数据库基本概念1、关系:两个表的公共字段2、行:也称记录,也称实体3、列:也称字段,也称属性就表结构而言,表分为行和列;就表数据而言,分为记录和字段;就面向对象而言,一个记录就是一个实体,一个字段就是一个属性。4、数据冗余:相同的数据存储在不同的地方脚下留心:1、冗余只能减少,不能杜绝。2、减少冗余的方法是分表3

Linux服务器初始化、yum安装java、redis、mysql

目录前言一、yum安装java二、yum安装redis三、yum安装mysql前言本文使用yum命令安装部署可能会用到的相关应用安装软件包之前,我们需要先更新系统,以确保安装的软件包是最新的版本。执行以下命令:sudoyumupdate一、yum安装java1、查看可安装版本yum-ylistjava*2、安装1.8版

redis的安装和配置

文章目录1.安装Redis1.1依赖库1.2上传安装包并解压2启动Redis2.1默认启动2.2指定配置启动2.3开机自启3Redis桌面客户端3.1Redis命令行客户端3.2图形化桌面客户端3.2.1安装3.2.2建立连接1.安装Redis大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供W

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)

目录写在开头第一步:主机发现和端口扫描第二步:Web渗透(修改XFF代理)第三步:数据库手工枚举第四步:sudophp提权总结与思考写在开头本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。MeandMyGirlfriend这个靶机是近期

《Java8实战》

《Java实战》学习整理文章目录一、Lambda1.1基础概念1.1.1[Lambda表达式](https://baike.baidu.com/item/Lambda表达式/4585794?fromModule=lemma_inlink)定义1.2引入Lambda1.3Lambda1.3.1函数式接口1.3.2Lamb

pyecharts可视化

pyecharts是基于Echarts图表的一个类库Echarts是百度开源的一个可视化JavaScript库一、pyecharts简介pyecharts主要基于web浏览器进行显示,绘制图形(有折线图、柱状图、饼图、漏斗图、地图及极坐标图等)安装pipinstallpyecharts二、pyecharts的使用方法绘

jmeter生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。笔者刚做了这方面的尝试,总结出来分享给大家。这里需要用到ant来执行测试用例并生成HTML格式测试报告。一、ant下载安装1.1、下载地址:http://ant.apache.org/bindownload

计算机网络运维方向综合知识大全

一.基础知识1.网络的组成组成部分:硬件、软件、协议硬件主要由主机(也称端系统)、通信链路(如双绞线、光纤)、交换设备(如路由器、交换机等)和通信处理机(如网卡)等组成。软件主要包括各种实现资源共享的软件和方便用户使用的各种工具软件(如网络操作系统、邮件收发程序、FTP程序、聊天程序等)。软件部分多属于应用层。协议是计

热文推荐