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

目录

 

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

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

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

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

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

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

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

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

代码+运行结果:

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;}
};

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

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

相关文章

2023最新python学习方法总结!(内部机密)

不要再问我python好不好学了 我之前做过半年少儿编程老师&#xff0c;一个小学四年级的小孩子都能在我的教学下独立完成python游戏&#xff0c;植物大战僵尸简单版&#xff0c;如果要肯花时间&#xff0c;接下来的网络开发也不是问题&#xff0c;人工智能也可以学个调包也没啥问…

【Python机器学习】实验10 支持向量机

文章目录 支持向量机实例1 线性可分的支持向量机1.1 数据读取1.2 准备训练数据1.3 实例化线性支持向量机1.4 可视化分析 实例2 核支持向量机2.1 读取数据集2.2 定义高斯核函数2.3 创建非线性的支持向量机2.4 可视化样本类别 实例3 如何选择最优的C和gamma3.1 读取数据3.2 利用数…

MySQL出现(2003)错误的解决方法(三种思路)

MYSQL的2003错误代码是:"cant connection to mysql server on ‘IP’" 意思为:"无法连接到“IP”上的 mysql 服务器". 我下列描述的问题中,第一种和第三种是以虚拟机连接MYSQL的2003方法; 而第二种是用的typora-setup-x64在本机中使用构建MYSQL服务的方…

Java集合框架面试题总结及解析

文章目录 说出 collection 的常用子接口&#xff1f;说出 3 个以上的常 用方法&#xff1f;都有什么作用&#xff1f;如果向 TreeSet 中加入类对象&#xff0c;需要做什么&#xff1f;Set 里的元素是不能重复的&#xff0c;那么用什么方法来区分重复与否呢? 是用还是 equals()…

【2022最新Java面试宝典】—— Java集合面试题(52道含答案)

目录 一、集合容器概述1. 什么是集合2. 集合的特点3. 集合和数组的区别4. 使用集合框架的好处5. 常用的集合类有哪些&#xff1f;6. List&#xff0c;Set&#xff0c;Map三者的区别&#xff1f;7. 集合框架底层数据结构8. 哪些集合类是线程安全的&#xff1f;9. Java集合的快速…

关于集合的面试题

一、集合与数组 数组&#xff08;可以存储基本数据类型&#xff09;是用来存现对象的一种容器&#xff0c;但是数组的长度固定&#xff0c;不适合在对象数量未知的情况下使用。 集合&#xff08;只能存储对象&#xff0c;对象类型可以不一样&#xff09;的长度可变&#xff0…

Java 集合面试题小结(1)

1. 集合和数组的区别 数组是固定长度的&#xff1b;集合可变长度的。数组可以存储基本数据类型&#xff0c;也可以存储引用数据类型&#xff1b;集合只能存储引用数据类型。数组存储的元素必须是同一个数据类型&#xff1b;集合存储的对象可以是不同数据类型。 2. 使用集合框…

Java 集合 相关面试题

1、说说 List, Set, Queue, Map 四者的区别&#xff1f; ⚫ List(对付顺序的好帮手): 存储的元素是有序的、可重复的。 ⚫ Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。 ⚫ Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序&#xff0c;存储…

Java集合面试题汇总大全

每个集合的出现一定是为了解决某种问题的解决方案。 集合流程图 JAVA中集合和数组的区别Collection和Collections的区别ArrayList和LinkedList 和Vector的区别list/set/map的区别HashSet和TreeSet和LinkedHashSet区别HashMap和Hashtable的比较HashMap和ConcurrentHashMap区别H…

50道Java集合经典面试题(收藏版)

前言 来了来了&#xff0c;50道Java集合面试题也来啦~ 已经上传github: https://github.com/whx123/JavaHome 1. Arraylist与LinkedList区别 可以从它们的底层数据结构、效率、开销进行阐述哈 ArrayList是数组的数据结构&#xff0c;LinkedList是链表的数据结构。随机访问的时候…

Java——12个关于Java中集合的面试题

文章目录&#xff1a; 1.请问 ArrayList、HashSet、HashMap 是线程安全的吗&#xff1f;如果不是怎么获取线程安全的集合&#xff1f; 2.ArrayList内部用什么实现的&#xff1f; 2.1 无参构造源码分析 2.2 有参构造源码分析&#xff08;参数为容量&#xff09; 2.3 有参构…

Java面试题总结 - Java集合篇(附答案)

目录 一、Java 容器都有哪些&#xff1f; 二、Collection 和 Collections 有什么区别&#xff1f; 三、list与Set区别 四、HashMap 和 Hashtable 有什么区别&#xff1f; 五、说一下 HashMap 的实现原理&#xff1f; 六、set有哪些实现类&#xff1f; 七、说一下 HashSet…

【面试】Java集合面试题

文章目录 集合容器概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些&#xff1f;List&#xff0c;Set&#xff0c;Map三者的区别&#xff1f;集合框架底层数据结构哪些集合类是线程安全的&#xff1f;Java集合的快速失败机制 “fail-fast”&…

面试题----集合

目录 概述 List,Set,Map 集合框架底层数据结构总结 List Set Map 为什么要使⽤集合&#xff1f; 如何选⽤集合? 迭代器 Iterator 是什么&#xff1f; 迭代器 Iterator 有啥⽤&#xff1f; Iterator 和 ListIterator 的区别是什么&#xff1f; 有哪些集合是线程不安…

Java集合面试题(总结最全面的面试题!!!)

文章目录 集合概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些&#xff1f;List&#xff0c;Set&#xff0c;Map三者的区别&#xff1f;集合框架底层数据结构哪些集合类是线程安全的&#xff1f;Java集合的快速失败机制 “fail-fast”&#xff…

50道关于Java的集合经典面试题

1. Arraylist与LinkedList区别 可以从它们的底层数据结构、效率、开销进行阐述哈 ArrayList是数组的数据结构&#xff0c;LinkedList是链表的数据结构。随机访问的时候&#xff0c;ArrayList的效率比较高&#xff0c;因为LinkedList要移动指针&#xff0c;而ArrayList是基于索…

JAVA集合一些面试题

集合是程序员在面试的时候很大可能都会被问到。虽然集合不怎么困难&#xff0c;但是能把他仔细划分却又稍显困难。这里稍微搜罗了一些有关集合的面试题来进行分享。 我们先通过一张思维导图认识一下集合的框架构成&#xff0c;方便理解和记忆。 下面简单的归纳了一下给大家整…

集合面试问题总结

简述Java中的集合 集合类存放于 Java.util 包中&#xff0c;主要有 3 种&#xff1a;set(集&#xff09;、list(列表包含 Queue&#xff09;和 map(映射)。 Collection&#xff1a;Collection 是集合 List、Set、Queue 的最基本的接口。 Iterator&#xff1a;迭代器&#xff0…

java集合详解和集合面试题目

一、集合与数组 数组&#xff08;可以存储基本数据类型&#xff09;是用来存现对象的一种容器&#xff0c;但是数组的长度固定&#xff0c;不适合在对象数量未知的情况下使用。 集合&#xff08;只能存储对象&#xff0c;对象类型可以不一样&#xff09;的长度可变&#xff0…

Java集合的常见面试题(全)

这里写目录标题 前言常用的集合类有哪些集合底层数据结构ArrayList 和 LinkedList 的区别HashSet 如何检查重复HashSet与HashMap的区别HashMap 和 Hashtable 的区别HashMap 的底层实现HashMap 的长度为什么是 2 的幂次方ConcurrentHashMap 和 Hashtable 的区别HashMap源码细节C…