20. 有效的括号
思路:用栈去找对应的左右括号
三种情况不匹配:
1. 右括号太多:stack在pop时已经empty
2. 左括号太多:遍历之后stack非空
3. 左右括号不匹配:c!=stack.pop
1047. 删除字符串中的所有相邻重复项
思路:手动消除感觉用栈来实现的逻辑一样
class Solution {
public String removeDuplicates(String s) {
// 将 res 当做栈
// 也可以用 StringBuilder 来修改字符串,速度更快
// StringBuilder res = new StringBuilder();
StringBuffer res = new StringBuffer();
// top为 res 的长度
int top = -1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// 当 top > 0,即栈中有字符时,当前字符如果和栈中字符相等,弹出栈顶字符,同时 top--
if (top >= 0 && res.charAt(top) == c) {
res.deleteCharAt(top);
top--;
// 否则,将该字符 入栈,同时top++
} else {
res.append(c);
top++;
}
}
return res.toString();
}
}
直接把字符串作为栈
String str = "";
//剩余的元素即为不重复的元素
while (!deque.isEmpty()) {
str = deque.pop() + str;
}
return str;
从栈转换为string的办法
150. 逆波兰表达式求值
栈擅长做相邻字符的消除,后缀表达式也算其中一种
逆波兰表达式是用后序遍历的方式把二叉树序列化
后缀表达式对计算机来说是非常友好的
文章讲述了如何使用栈数据结构解决有效括号匹配问题,以及如何删除字符串中的相邻重复字符。还提及了栈在逆波兰表达式求值中的应用,强调其在处理字符串操作中的优势。
303





