代码随想录第11天-栈与队列

39 阅读2分钟

1. 20.有效的括号

题目链接:
leetcode.cn/problems/va…

解题思路:
该题可以使用辅助栈的方法进行。

  1. 首先遍历字符串S,如果遇到左括号就把左括号放入栈中,直到遍历完。
  2. 从栈中弹出元素(此时的元素必为左括号),用这个和S剩下的元素进行对比,如果匹配不上直接报错,匹配上了就更新栈的元素,把能匹配的左括号弹出去。依次类推。
  3. 如果都能匹配成功,那么最后栈的长度必为0。

代码如下:

微信图片_20221114105455.png

2. 1047.删除字符串中的所有相邻重复项

题目链接:
leetcode.cn/problems/re…
解题思路:
该题同样可以用栈的方法来解决。
我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?

所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。

然后再去做对应的消除操作。

代码实现:

微信图片_20221114111508.png

3. 150.逆波兰表达式求值

题目链接: leetcode.cn/problems/ev…

解题思路:

  1. 逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作:

  2. 如果遇到操作数,则将操作数入栈;

  3. 如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。

代码实现:

微信图片_20221114125839.png