1. 20.有效的括号
题目链接:
leetcode.cn/problems/va…
解题思路:
该题可以使用辅助栈的方法进行。
- 首先遍历字符串S,如果遇到左括号就把左括号放入栈中,直到遍历完。
- 从栈中弹出元素(此时的元素必为左括号),用这个和S剩下的元素进行对比,如果匹配不上直接报错,匹配上了就更新栈的元素,把能匹配的左括号弹出去。依次类推。
- 如果都能匹配成功,那么最后栈的长度必为0。
代码如下:
2. 1047.删除字符串中的所有相邻重复项
题目链接:
leetcode.cn/problems/re…
解题思路:
该题同样可以用栈的方法来解决。
我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?
所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。
然后再去做对应的消除操作。
代码实现:
3. 150.逆波兰表达式求值
题目链接: leetcode.cn/problems/ev…
解题思路:
-
逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作:
-
如果遇到操作数,则将操作数入栈;
-
如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。
代码实现: