链接:代码随想录
文章目录
- 20.有效的括号
- 1047.删除字符串中的所有相邻重复项
- 150.逆波兰表达式求值
- 解题方法
- 题目思路
- 示例代码
- 总结
解题思路
1.20.有效的括号 解题思路
首先是题目判断的顺序是先进来的最后判断,所以考虑栈的算法。那么当遇到' ( ',我们可以向栈中加入其反' ) ',并且让其出栈,若错误,或者多了,或者少了那么可以判定其无法满足条件。
代码如下(示例):
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for(int i = 0;i < s.length();i++){
ch = s.charAt(i);
if(ch == '('){ //加入其反
deque.push(')');
}else if(ch == '['){
deque.push(']');
}else if(ch == '{'){
deque.push('}');
}else if(deque.isEmpty() || deque.peek() != ch){ //判定是否两两对应的条件
return false;
}else{
deque.pop();
}
}
return deque.isEmpty();//判定deque是否为空栈
}
}
2.1047.删除字符串中的所有相邻重复项 解题思路
直接一个一个进栈判定就得了,相同就删,保留在最后的就是符合题目条件的
代码如下(示例):
class Solution {
public String removeDuplicates(String s) {
ArrayDeque<Character> deque = new ArrayDeque<>();
char ch;
for(int i = 0;i < s.length();i++){
ch = s.charAt(i);
if(deque.isEmpty() || deque.peek() != ch){ //判定相邻项是否相等
deque.push(ch);
}else{
deque.pop(); //不等就删除
}
}
String str = "";
while(!deque.isEmpty()){ //结果返回字符串
str = deque.pop() +str;
}
return str;
}
}
3.150.逆波兰表达式求值 解题思路
逆波兰表达式即是后缀表达式,直接用栈计算即可
代码如下(示例):
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> stack = new LinkedList();
for (String s : tokens) { //leecode这里不支持==
if ("+".equals(s)) {
stack.push(stack.pop() + stack.pop());
} else if ("-".equals(s)) {
stack.push(-stack.pop() + stack.pop());
} else if ("*".equals(s)) {
stack.push(stack.pop() * stack.pop());
} else if ("/".equals(s)) {
int temp1 = stack.pop();
int temp2 = stack.pop();
stack.push(temp2 / temp1);
} else {
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}
总结
多是栈的基本运用,熟练就好做