栈的应用妙招:五道题秒解字符串难题
栈是我们之前学过的一种容器针对特定的题型这种容器能让我们更快地解决问题1.删除字符串中的所有相邻重复项题目来源1047. 删除字符串中的所有相邻重复项 - 力扣LeetCode这道题有点像俄罗斯方块那个游戏可以消除的版本可以将字符串竖着看就像这样将相邻的元素都删掉可以发现题目完美符合栈这个数据结构可以在这里使用栈但没必要用一个字符串来模拟栈就足够了具体代码如下2.比较含退格的字符串题目来源844. 比较含退格的字符串 - 力扣LeetCode题目的意思很简单把#当做删除键对字符串进行处理最后比较处理完的字符串相不相等可以发现这道题和上一道题基本上是一模一样的只不过删除的规则不一样上道题删除的规则是有相邻的相同字母就删除这道题是遇到‘#’就删除具体代码如下3.基本计算器II题目来源227. 基本计算器 II - 力扣LeetCode先来看题目是什么意思题目给了我们一个字符串这个字符串的内容表示一个计算式需要我们将计算的结果返回字符串中的字符大致可以分为三类1数字2运算符号3空格因为空格很好处理所以我们这里只需要考虑数字和运算符号怎么处理就好了按照计算式来看每一个数字都对应着一个计算符号由于运算符号优先级的关系这里‘*’ ‘/’和,-之间需要采取不同的处理方式运算符号是‘*’,/时可以直接与前一个数字进行运算运算符号是‘’‘-’时需要考虑后面的符号是否是‘*’‘/’所以我们需要一个整形数组来管理结果数组中的每一个元素都是进行完乘除操作或者是不需要乘除操作的数字最后将这些元素都加起来就得到了最终的结果具体代码如下还有一个需要注意的点在统计每一个数字时我们需要考虑这个数字是几位数并且因为for循环本身会进行所以我们需要先检查下一个字符是否是数字再决定是否要进行这样的好处是不会跳过运算符号4.字符串解码题目来源394. 字符串解码 - 力扣LeetCode根据题目的意思我们可以知道字符的类型共有四种1.数字2.字母3.[4.‘]’根据这四种情况我们需要采取不同的处理方法以下面这个例子来分析根据题目的意思我们能够知道每一个括号前都有一个数字代表括号里面的内容要重复出现几次所以出现一个数字时我们需要将这个数字记录下来又因为数字后面可能还有其他括号内容对应的数字并且内部的内容是先进行复制的这种先后顺序完美符合栈这个数据结构所以我们可以定义一个栈来管理数字同样的我们可以定义一个栈来管理字符串当遇到数字时我们将数字记录下来当遇到‘[’时我们让i根据‘[’后面是什么字符来考虑进行什么操作如果后面是数字就再次将数字记录下来如果是字母那就将字母记录下来当遇到]时我们将字符串的栈顶元素和数字的栈顶元素拿出来解析加到字符的栈顶元素的后面当遇到字母时将字母加到栈顶元素的后面就好了具体代码如下5.验证栈序列题目来源946. 验证栈序列 - 力扣LeetCode这道题的意思很简单让我们用那两个数组来模拟栈的进栈出栈看操作是否合法我们直接创建一个栈来进行模拟就好了具体代码如下以上就是本篇文章的全部内容了如果对你有帮助可以点个赞支持一下感谢各位的观看TA 关注的仓库 - 陌染青云 (mo-ran-qingyun) - Gitee.com这是我个人的gitee 仓库,账号上文章的代码都会发到仓库里有兴趣可以看一下