1-leetcode20. 有效的括号
注意:×
- 思路看懂了其实是好做的
- 注意最后返回的时候,需要判断栈有没有被清空,可能存在直接给你一个
[
作为案例
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '['){
stack.push(c);
}else {
// 走到这里的都是右侧括号
if (!stack.isEmpty() && getLeftChar(c) == stack.peek()){
stack.pop();
}else {
return false;
}
}
}
return stack.isEmpty();
}
private Character getLeftChar(char c) {
if (c == ')'){
return '(';
}
if (c == '}'){
return '{';
}
if (c == ']'){
return '[';
}
return null;
}
2-leetcode155. 最小栈
注意:√
- 自己写过去的,之前LRU的时候写了一遍
class MinStack {
Stack<Integer> minStack;
Stack<Integer> trueStack;
public MinStack() {
minStack = new Stack<>();
trueStack = new Stack<>();
}
public void push(int val) {
trueStack.push(val);
if (minStack.isEmpty()) {
minStack.push(val);
} else {
if (val <= minStack.peek()) {
minStack.push(val);
} else {
int vall = minStack.peek();
minStack.push(vall);
}
}
}
public void pop() {
minStack.pop();
trueStack.pop();
}
public int top() {
return trueStack.peek();
}
public int getMin() {
return minStack.peek();
}
}
3-leetcode394. 字符串解码
注意:×
- 基本上是边看边抄,思路有点意思,肯定需要再做几遍
public String decodeString(String s) {
int multi = 0;
StringBuilder sb = new StringBuilder();
Stack<Integer> multiStack = new Stack<>();
Stack<StringBuilder> sbStack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '['){
multiStack.push(multi);
sbStack.push(sb);
multi = 0;
sb = new StringBuilder();
} else if (c == ']') {
StringBuilder temp = new StringBuilder();
int n = multiStack.pop();
for (int i = 0; i < n; i++) {
temp.append(sb);
}
sb = sbStack.pop().append(temp);
} else if (c >= '0' && c <= '9') {
multi = multi * 10 + c-'0';
}else {
sb.append(c);
}
}
return sb.toString();
}
4-leetcode739. 每日温度
注意:×
- 单调栈应用,下面是Labuladong的单调栈模板
- 注意for循环里面的是
while
循环
public int[] dailyTemperatures(int[] temperatures) {
int[] res = new int[temperatures.length];
if (temperatures.length == 0){
return res;
}
Stack<Integer> stack = new Stack<>();
for (int i = temperatures.length - 1; i >= 0; i--) {
while (!stack.isEmpty() && temperatures[stack.peek()] <= temperatures[i]){
stack.pop();
}
res[i] = stack.isEmpty()? 0 : (stack.peek() - i);
stack.push(i);
}
return res;
}