好题记录 Leetcode 394.字符串解码 中等难度

news2025/1/12 7:49:32

在这里插入图片描述

方法一:递归

思路很简单,比较好理解,注意细节处理!!!

class Solution {
public:
    string decodeString(string s) {
        string ans;
        for(int i=0;s[i]!=0;i++){
            if(s[i]>='a'&&s[i]<='z')
               ans+=s[i];
            if(s[i]>='0'&&s[i]<='9'){
                int times=0;
                while(s[i]>='0'&&s[i]<='9'){
                    times=times*10+s[i]-'0';
                    i++;
                } //结束时i的位置是'['
                int pos=i+1;//i+1为这组[]内的第一个元素
                int flag=1;  //存在某个[没有配对的时候 flag为1,每一对左右括号都配对后flag=0
                while(flag){
                    i++;
                    if(s[i]=='[')   flag++;
                    if(s[i]==']')   flag--;
                }//这个循环结束时i的位置是配对结束时']'的位置
                string tmp=decodeString(s.substr(pos,i-pos));
                for(int j=0;j<times;j++)
                    ans+=tmp;
            }
        }
        return ans;
    }
};

方法二:数字栈与字符串栈

在这里插入图片描述

class Solution {
public:
    string decodeString(string s) {
        string res="";
        stack<int> nums;
        stack<string> strs;
        int times=0;  //记录次数
        for(int i=0;i<s.size();i++){
            if(s[i]>='a'&&s[i]<='z')  //a-z直接加入res后
               res+=s[i];
            else if(s[i]>='0'&&s[i]<='9'){  //碰到0-9化成次数,数字可能连续好几位要注意
                times=times*10+s[i]-'0'; 
            }
            else if(s[i]=='['){      //碰到左括号[,将当前res和当前times各自入栈,并分别置空和置0
                nums.push(times);
                strs.push(res);
                times=0;
                res="";
            }
            else {   //碰到右括号]时,操作如下
                int tmp=nums.top();  //数字栈的栈顶元素表示次数tmp,然后出栈
                nums.pop();    
                while(tmp--)  strs.top()+=res; //将当前res添加tmp次到字符串栈的栈顶后,再赋给res后出栈
                res=strs.top();    //之后若还是字母,就会直接加到res之后,因为它们是同一级的运算
                                  //若是左括号,res会被压入strs栈,作为上一层的运算
                strs.pop();
            }
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7系统安装与配置、常用100条操作命令

CentOS 7 是一个广泛使用的开源 Linux 操作系统&#xff0c;它是 Red Hat Enterprise Linux (RHEL) 的一个免费重建版本&#xff0c;以稳定性和安全性而著称。在 CentOS 7 上安装虚拟机通常使用虚拟化技术&#xff0c;如 VirtualBox 或 VMware 等。以下是 CentOS 7 的简要介绍以…

外国固定资产管理系统功能有哪些

很多公司都在寻找提高自己资产管理效益的方法。为了满足这一要求&#xff0c;国外的固定资产管理系统已经发展成多种形式。以下是国外一些常见的固定资产管理系统的特点:自动化和智能化:许多现代固定资产管理系统采用自动化和数字化技术&#xff0c;以简化流程&#xff0c;减少…

使用vue-cli搭建SPA项目及使用和路由及路由嵌套的使用

目录 一、介绍 ( 1 ) 概述 ( 2 ) 作用 二、项目搭建 SPA介绍 讲述 特点 优点 ( 1 ) 检查 ( 2 ) 安装 ( 3 ) 构建 ( 4 ) 启动 ( 5 ) 导入 三、路由及嵌套使用 ( 1 ) 路由 ( 2 ) 嵌套 给我们的收获 一、介绍 ( 1 ) 概述 vue-cli是一个基于Vue.js的脚…

Next.js项目初始化(附gitHub地址)

Next.js项目初始化 1.脚手架搭建 npx create-next-applatest 生成目录&#xff1a; 我生成的package.json: {"name": "nest-initial-demo","version": "0.1.0","private": true,"scripts": {"dev": …

基于微信小程序的医院挂号预约系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

智能配电系统:保障电力运行安全、可控与高效

智能配电系统是一种先进的电力分配技术&#xff0c;它通过智能化、数字化和网络化等方式&#xff0c;有效地保障了电力运行的安全、可控和高效。 力安科技智能配电系统是在配电室&#xff08;含高压柜、变压器、低压柜&#xff09;、箱式变电站、配电箱及动力柜&#xff08…

jvm垃圾收集算法

简介 由于《分代收集理论》和不同垃圾收集算法&#xff0c;Java堆会被划分为不同区域&#xff0c;一般至少会把Java堆划分为新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;两个区域。 垃圾收集器可以只回收其中某一个或者某…

爬虫 — App 爬虫(二)

目录 一、Appium介绍二、node.js 安装三、Java 的 SDK 安装以及配置1、安装步骤2、配置环境变量 四、安卓环境的配置1、配置环境变量 五、Appium 安装1、安装2、打开 APP3、使用 六、Appium 使用1、定位数据&#xff08;方法一&#xff0c;不常用&#xff09;2、定位数据&#…

Linux系统上使用SQLite

1. 安装SQLite 在Linux上安装SQLite非常简单。可以使用包管理器&#xff08;如apt、yum&#xff09;直接从官方软件源安装SQLite。例如&#xff0c;在Ubuntu上使用以下命令安装SQLite&#xff1a; sudo apt-get install sqlite32. 打开或创建数据库 要打开或创建一个SQLite数…

C语言每日一题(8):有序序列合并

文章主题&#xff1a;有序序列合并&#x1f525;&#x1f525;&#x1f525;所属专栏&#xff1a;C语言每日一题&#x1f4d7;作者简介&#xff1a;每天不定时更新C语言的小白一枚&#xff0c;记录分享自己每天的所思所想&#x1f604;&#x1f3b6;个人主页&#xff1a;[₽]的…

启动盘制作软件 Rufus

下载链接&#xff1a;Rufus - 轻松创建 USB 启动盘 我根据自己的系统选择了X86 找一个路径即可下载

基于SSM框架的《超市订单管理系统》Web项目开发(第四天)用户管理,增删改查(日期插件的使用)

基于SSM框架的《超市订单管理系统》Web项目开发&#xff08;第四天&#xff09;用户管理&#xff0c;增删改查&#xff08;日期插件的使用&#xff09; 昨天我们实现了多表关联查询&#xff0c;还有分页显示数据的功能。那么今天我们要继续完善用户管理这一模块。 今天要完成的…

基于微信小程序的网上商城设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Linux小程序-进度条

进度条我将实现三个版本&#xff1a; 1 简单原理版本 2 实际工程实践版本 3 c语言扩展-设计颜色 首先我们需要有一些前置知识&#xff1a;关于行缓冲区和回车换行 行缓冲区&#xff1a;c/c语言会针对标准输出给我们提供默认的缓冲区&#xff0c;这次的角色是输出缓冲区 输…

java框架-Springboot-快速入门

文章目录 组件注册条件注解属性绑定自动装配原理自定义组件yaml属性配置日志日志级别日志分组文件输出文件归档与文件切割自定义配置切换日志组合 组件注册 Configuration、SpringBootConfigurationBean、ScopeController、Service、Repository、ComponentImportComponentScan…

selenium不定位元素直接使用键盘操作(如弹框操作)

今天在使用selenium进行定位时&#xff0c;发现直接定位不了chrome的弹框&#xff0c;如这种弹框&#xff1a; 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错&#xff0c;说是没有 alert windown。。。。 啊&#xff1f;难道chrome的弹框不是用alert写的&…

Go 多版本管理工具

Go 多版本管理工具 文章目录 Go 多版本管理工具一、go get 命令1.1 使用方法&#xff1a; 二、Goenv三、GVM (Go Version Manager)四、voidint/g4.1 安装4.2 冲突4.3 使用 在平时开发中&#xff0c;本地新旧项目并行开发的过程中&#xff0c;你大概率会遇到一个令人头疼的问题&…

MyBatisPlus 底层用 json 存储,Java 仍然使用 对象操作

PO 类的字段定义为一个对象&#xff0c;然后使用以下注解修饰 TableField(typeHandler JacksonTypeHandler.class) 当然 jsonTypeHandler 有多种可以选择

【多尺度无监督:Pansharpening】

Mun-GAN: A Multiscale Unsupervised Network for Remote Sensing Image Pansharpening (Mun-GAN&#xff1a;一种多尺度无监督遥感图像泛锐化网络) 在遥感图像融合中&#xff0c;全色锐化是一种遥感图像融合方法&#xff0c;旨在融合全色&#xff08;PAN&#xff09;图像和多…

Jmeter对图片验证码的处理

​jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证…