栈与队列相关
20. 有效的括号
参考文章
题目链接
个人题解
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '{' || c == '[' || c == '(') {
stack.push(c);
} else {
if (c == '}') {
if (stack.isEmpty() || stack.pop() != '{') {
return false;
}
}
if (c == ']') {
if (stack.isEmpty() || stack.pop() != '[') {
return false;
}
}
if (c == ')') {
if (stack.isEmpty() || stack.pop() != '(') {
return false;
}
}
}
}
return stack.isEmpty();
}
}
1047. 删除字符串中的所有相邻重复项
参考文章
题目链接
个人题解
class Solution {
public String removeDuplicates(String s) {
ArrayDeque<Character> queue = new ArrayDeque<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (queue.isEmpty() || queue.peek() != ch) {
queue.push(ch);
} else {
queue.pop();
}
}
String res = "";
if (!queue.isEmpty()) {
while (!queue.isEmpty()) {
res = queue.pop() + res;
}
}
return res;
}
}
150. 逆波兰表达式求值
参考文章
题目链接
个人题解
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> stack = new LinkedList<Integer>();
for (String s : tokens) {
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)) {
Integer t1 = stack.pop();
Integer t2 = stack.pop();
stack.push(t2 / t1);
}else {
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}