20. 有效的括号
1.三种不匹配类型
(1)左括号多了
(2)右括号多了
(3)左右括号的个数相同但是不匹配
括号匹配很适合栈的先进后出
2.出错原因
未判断栈是否为空就进行栈弹出操作
改进代码:
if(deque.isEmpty()||s.charAt(i)!=deque.pop()) return false;
1047. 删除字符串中的所有相邻重复项
栈很适合做这种类似于相邻字符的消除的操作,因为栈帮助我们记录了遍历数组当前元素时候,前一个元素是什么。
主要是要分清最后字符串的顺序,用栈操作最后要翻转字符串。
while (!deque.isEmpty()) {
str = deque.pop() + str;
}
可以用字符串直接操作,这样就不需要再翻转字符串。
150. 逆波兰表达式求值
1.逆波兰式
运算式的后序遍历,平时常见的是中序遍历,逆波兰式不需要加括号。
2.使用栈一定要注意顺序,可能需要的顺序不是跳出顺序。
3.出现的问题:越界访问
解决:栈的压入不正常,对string判断是否为数字的判断不正确导致栈的压入错误,从而导致访问越界。