提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
栈与递归之间在某种程度上是可以转换的
一、力扣20. 有效的括号
class Solution {
public boolean isValid(String s) {
Deque<Character> deq = new LinkedList<>();
for(char c : s.toCharArray()){
if(c == '(' || c == '[' || c == '{'){
deq.offerLast(c);
}else{
if(deq.isEmpty()){
return false;
}
char a = deq.pollLast();
if(c == ')' && a != '('){
return false;
}else if(c == ']' && a != '['){
return false;
}else if(c == '}' && a != '{'){
return false;
}
}
}
return deq.isEmpty();
}
}
二、力扣1047. 删除字符串中的所有相邻重复项
class Solution {
public String removeDuplicates(String s) {
Deque<Character> deq = new LinkedList<>();
for(char c : s.toCharArray()){
if(!deq.isEmpty() && c == deq.peekLast()){
deq.pollLast();
continue;
}else{
deq.offerLast(c);
}
}
StringBuilder sb = new StringBuilder();
while(!deq.isEmpty()){
sb.append(deq.pollFirst());
}
return sb.toString();
}
}
三、力扣150. 逆波兰表达式求值
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> deq = new LinkedList<>();
for(String s : tokens){
if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){
int right = deq.pollLast();
int left = deq.pollLast();
switch(s){
case "+":
deq.offerLast(left+right);break;
case "-":
deq.offerLast(left-right);break;
case "*":
deq.offerLast(left*right);break;
case "/":
deq.offerLast(left/right);break;
}
}else{
deq.offerLast(Integer.parseInt(s));
}
}
return deq.pollLast();
}
}
文章介绍了如何使用栈和队列数据结构来解决LeetCode中的三个问题:检查有效括号、删除字符串中的相邻重复字符以及逆波兰表达式的求值,展示了递归与非递归方法的转换应用。

426

被折叠的 条评论
为什么被折叠?



