【leetcode】394. 字符串解码

news/2025/3/26 18:18:25/

题目链接:力扣

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

 这道题……好绕啊 以至于我看题解的时候都看了好久  才明白了。

首先不可避免的是,要记录两个值,一个是字符串,一个是字符串重复的次数,即数字

考虑有嵌套[]的情况下(如示例2:3[a2[c]] )由于在遍历字符串s的过程中,会冲掉前面保存的数组和字符串,所以要选用栈来对字符串和数字进行保存

这里用到两个栈,(也有人用一个栈的 stack<pair<string, int>> st,其本质也是两个栈,为了更清楚的表达,这里我们采用两个栈)

首先定义了两个栈

stack<string> Mystack;

stack<int> Numstack;

然后以此遍历字符串s

遍历字符有四种情况
        //1、如果是数字 将数字转成整型数字等待处理
        //2、如果是字符 将字符添加到当前临时字符串中
        //3、如果是'['  将当前数字和临时字符串添加到各自栈中
        //4、如果是']'  将数字和字符栈各取出,然后拼接成新的临时字符串

    string decodeString(string s) {stack<string> Mystack;stack<int> Numstack;string res = "";string temp="";  //记录循环数for(int i=0; i<s.size();i++){if('0'<=s[i] && s[i] <='9'){temp += s[i];continue;}else if(s[i] == '['){int count = atoi(temp.c_str());Numstack.push(count);Mystack.push(res);temp = "";res = "";}else if('a'<=s[i] && s[i]<='z'){res += s[i];   }else if(s[i] == ']'){ string pre  = Mystack.top();     //当前左括号之前的字符串int n = Numstack.top();          //当前左括号之前的数字string cur;                      //当前右括号内的字符串for(int i=0; i<n;i++)cur+=res;res = pre + cur;Numstack.pop();Mystack.pop();}}return res;}


http://www.ppmy.cn/news/1009615.html

相关文章

设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)

目录 概述概念组成应用场景注意事项类图 衍化过程需求简单工厂实现图代码 策略模式图代码 策略模式简单工厂图代码 总结升华版本迭代的优化点及意义什么样的思路进行衍化的扩展思考--如何理解策略与算法 概述 概念 策略模式是一种行为型设计模式&#xff0c;它定义了算法家族&…

6.4.tensorRT高级(1)-UNet分割模型导出、编译到推理(无封装)

目录 前言1. Unet导出2. Unet推理总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-Unet分割模型导出、编译到…

Linux中处理文本的常用命令

有时候我们需要做简单的文本处理&#xff0c;Linux中的文本处理命令十分强大&#xff0c;能够提供非常大的便利。这篇博客介绍几个常用的文本处理的命令。 grep 行过滤工具&#xff1b;用于查找文件里符合条件的字符串。 语法 grep [选项] ‘关键字’ 文件名 常用选项 -i…

python 合并多个excel文件

使用 openpyxl 思路&#xff1a; 读取n个excel的文件&#xff0c;存储在一个二维数组中&#xff0c;注意需要转置。将二维数组的数据写入excel。 安装软件&#xff1a; pip install openpyxl源代码&#xff1a; import os import openpyxl # 将n个excel文件数据合并到一个…

Qt应用开发(基础篇)——时间微调输入框QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

代码分析:循环创建N个子进程——为什么最后一个属于父进程?

黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…

git 生成change-id的解决方法

解决问题 1&#xff0c;在提交代码时的信息会要求添加change-id的要求&#xff0c;但对于默认的git来说&#xff0c;是不会自动生成change-id的 2&#xff0c;当git push的时候&#xff0c;报错 remote: ERROR: commit 7c30eda: missing Change-Id in message footer 解决办…

Unity Git项目添加子模块

在 当前仓库根目录下执行命令 git submodule add https://github.com/xxx/child.git 检查仓库状态 git status 更新子库 git submodule update --remote 下拉父仓库Git并保住子库也更新 git pull --recurse-submodules 推荐使用 Githubdesktop工具 这样你可以更清楚的看到自己…