力扣hot100:394. 字符串解码(递归)

LeetCode:394. 字符串解码
在这里插入图片描述
本题容易想到用递归处理,在写递归时主要是需要明确自己的递归函数的定义。
不过我们也可以利用括号匹配的方式使用栈进行处理。

1、递归

  • 定义递归函数string GetString(string & s,int & i);
    • 表示处理处理整个number[letter],处理后i指向’]'之后的一个元素
    • letter中有这样的结构时,直接递归处理。
  • 定义函数int GetNum(string & s,int & i);
    • 在遇到数字时调用,表示获取s中前缀的数
      在这里插入图片描述
class Solution {
public:string decodeString(string s) {string target;int len = s.size();for(int i = 0; i < len;){if(s[i] <= 'z' && s[i] >= 'a'){target += s[i ++];}else{target += GetString(s, i);}}return target;}
private:string GetString(string & s,int & i){//处理number[letter],处理后i指向']'之后的一个元素int num = GetNum(s, i);//获取重复次数++ i;//忽略掉'['string str;//获取字符串的前面字符位  3[aa2[cd]ff]while(s[i] != ']'){if(s[i] <= 'z' && s[i] >= 'a'){str += s[i ++];}else{str += GetString(s, i);}}++ i;//忽略掉']'//重复子串string substr = str;while(--num){str += substr;}return str;}
private:int GetNum(string & s,int & i){int num = 0;while(s[i] >= '0' && s[i] <= '9'){num *= 10;num += s[i ++] -'0';}return num;}
};

2、栈操作

这里可以用不定长数组来模拟栈操作,方便从栈底向栈顶遍历。
我们可以使用类似括号匹配的方法,从左到右遍历字符串,将字符串压入栈中,遇到右括号']'则说明,一定会有一个左括号[匹配,我们可以将这之间的内容弹栈并形成一个整体,再从栈顶中拿出数字联合成一个串,压入栈中,以此类推,直到所有的左右括号匹配完,然后再链接所有串。
在这里插入图片描述

  • 时间复杂度: O ( S + ∣ s ∣ ) O(S + |s|) O(S+s)s是最终字符串长度,|s|是原字符串的长度。
    • 需要遍历原字符串一次,并且每一个字符需要入栈一次,每个字符要出栈一次,字符串需要进行连接,最终连接的长度取决于最终字符串长度。
  • 空间复杂度: O ( S ) O(S) O(S)
    在这里插入图片描述
class Solution {
public:string decodeString(string s) {vector<string> sta;for(auto i : s){if(i ==']'){string str;vector<string> temp;//获取[]中的字符串while(sta.back() != "["){temp.push_back(sta.back());sta.pop_back();}for(int j = temp.size() - 1; j >= 0; -- j)str += temp[j];//reverse(str.begin(), str.end());//翻转成正序sta.pop_back();//弹出'['string digitStr;//获取数字串while(sta.size() > 0 && sta.back() >="0" && sta.back() <= "9"){digitStr += sta.back();sta.pop_back();}int num = 0;//获取数字for(int j = digitStr.size() - 1; j >=0; -- j){num *= 10;num += digitStr[j] - '0';}//将number[letter]结合成一个串string substr = str;while(--num) str += substr;sta.emplace_back(str);}else sta.emplace_back(string() + i);}string ans;for(auto & i : sta)ans += i;return ans;}
};
  • 注意这两者的区别:
    • for(int j = temp.size() - 1; j >= 0; -- j) str += temp[j];
    • reverse(str.begin(), str.end());//翻转成正序
  • 前者并不改变栈中字符串内部顺序,而是改变栈中字符串之间的相对顺序
  • 后者会改变栈中字符串的内部顺序

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

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

相关文章

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…

Django与MySQL:配置数据库的详细步骤

文章目录 Django-MySQL 配置配置完执行数据迁移&#xff0c;如果报错: Error loading MySQLdb module&#xff0c; Django-MySQL 配置 # settings.pyDATABASES {# 默认配置sqlite3数据库# default: {# ENGINE: django.db.backends.sqlite3,# NAME: BASE_DIR / db.sqli…

Flutter 中的 ListTileTheme 小部件:全面指南

Flutter 中的 ListTileTheme 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的 Material 组件库中&#xff0c;ListTile 是一个用于展示列表项的…

[word] word文字间隙怎么调整? #媒体#职场发展

word文字间隙怎么调整&#xff1f; 在文档中的数据包含英文、数字、中文等&#xff0c;会有间隙&#xff0c;有时候误以为是空格&#xff0c;但是根本删除不了&#xff0c;其实这是默认的间隙&#xff0c;是可以调整的&#xff0c;下面教大家word文字间隙怎么调整的操作&#…

c#与汇川plc通信

前言 上位机开发中有时会要求与PLC进行通信。所以这里写了个简单的例子。 在C#中与汇川PLC进行通信&#xff0c;你可以使用S7NetPlus库&#xff0c;这是一个开源的库&#xff0c;专门用于与西门子S7系列PLC进行通信&#xff0c;其中也包括汇川PLC。 1.安装第三方库 需要安装S7…

RabbitMQ python第三方库pika应用入门实践

1. RabbitMQ简介 RabbitMQ是一个可靠、高效的开源消息代理服务器&#xff0c;基于AMQP协议。它具备以下特点&#xff1a; 可以支持多种消息协议&#xff0c;如AMQP、STOMP和MQTT等。提供了持久化、可靠性和灵活的路由等功能。支持消息的发布和订阅模式。具备高可用性和可扩展…

我对Chat-GPT4o的使用感受

ChatGTP4o代表了人工智能领域&#xff0c;特别是自然语言处理技术的重大进步。从埃隆马斯克的中可以看出&#xff0c;它具备以下显著特点和优势&#xff1a; 广泛的知识基础&#xff1a;通过连接大量包含真实世界对话的语料库进行训练&#xff0c;ChatGTP40能够理解和生成跨越…

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…

Springboot整合Knife4j接口文档

Springboot整合Knife4j接口文档 一、knife4j是什么二、快速开始1.Spring Boot 3版本1.引入依赖2.yml配置:3.示例代码 2.Spring Boot 3版本1.引入依赖2.yml配置3.4. 注解使用 一、knife4j是什么 Knife4j是一个基于SpringBoot构建的文档生成工具&#xff0c;旨在为Java MVC框架集…

web前端考核:全面解读与深入剖析

web前端考核&#xff1a;全面解读与深入剖析 在数字化浪潮席卷全球的今天&#xff0c;Web前端技术已成为互联网行业的核心驱动力之一。对于Web前端开发者而言&#xff0c;如何全面、深入地掌握这一领域的知识与技能&#xff0c;并通过考核验证自己的实力&#xff0c;是每位从业…

Java | Leetcode Java题解之第137题只出现一次的数字II

题目&#xff1a; 题解&#xff1a; class Solution {public int singleNumber(int[] nums) {int a 0, b 0;for (int num : nums) {b ~a & (b ^ num);a ~b & (a ^ num);}return b;} }

什么是 with dice coefficients(Dice系数)

记录一下 什么是 with dice coeffcients?&#xff08;本帖子不是专业的&#xff0c;只是在审稿的时候遇见了 所以就顺手查找一下并记录下来&#xff09; Dice系数和mIoU是语义分割的评价指标。   With Dice coefficients&#xff08;Dice系数&#xff09;是一种用于评估两个…

Linux 命令:iotop

1. 写在前面 本文主要介绍 Linux iotop 或 Input/Output top 命令&#xff1a;用于显示和监控磁盘 IO 使用详情&#xff0c;甚至获取进程现有 IO 使用情况。它是用 python 设计的&#xff0c;需要内核模块才能执行。系统管理员可以用它来追踪可能导致磁盘 I/O 读写量过高的特定…

vite+vue+ts项目中报错解决方案

1.vitevue3ts项目中提示无法找到模块 一&#xff0e;首先产生这个错误是&#xff1a;无法找到模块XXX&#xff0c;并且提示XXX is declared but its value is never read 二&#xff0e; 产生这个问题的原因是我们使用了ts语法&#xff0c;他只能识别.ts文件&#xff0c;并不…

4、js数据类型,检测数据类型

一、js数据类型 基本&#xff08;简单、原始&#xff09;数据类型&#xff1a;number/string/boolean/undefined/null/symbol/bigint引用&#xff08;复杂&#xff09;数组类型&#xff1a;object&#xff08;function,array&#xff0c;date&#xff09; 1、symbol是什么&…

javaweb学习(day14-ThreadLocal文件上传下载)

一、线程数据共享和安全 -ThreadLocal 1 什么是 ThreadLocal ThreadLocal 的作用&#xff0c;可以实现在同一个线程数据共享, 从而解决多线程数据安全问题. ThreadLocal 可以给当前线程关联一个数据(普通变量、对象、数组)set 方法 [源码!] ThreadLocal 可以像 Map 一样存取数…

[知识点]c++运算符重载

在 C 中&#xff0c;运算符重载&#xff08;Operator Overloading&#xff09;允许你定义或修改运算符的行为&#xff0c;使其适用于用户定义的类型&#xff08;例如类或结构体&#xff09;。通过运算符重载&#xff0c;你可以使自定义类型与内置类型一样自然地使用运算符。 重…

大模型的 Embedding 模型该如何进行微调?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

Vue的基础知识:v-model的原理,由:value与@input合写。

原理&#xff1a;v-model本质上是一个语法糖&#xff0c;比如应用在输入框上&#xff0c;就是value属性和input事件的合写。&#xff08;补充说明&#xff1a;语法糖就是语法的简写&#xff09; 作用&#xff1a;提供数据的双向绑定 1.数据变&#xff0c;视图&#xff08;也就…

[数据集][目标检测]叶子计数检测数据集VOC+YOLO格式240张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;240 标注数量(xml文件个数)&#xff1a;240 标注数量(txt文件个数)&#xff1a;240 标注类别…