模板题目:Stack( 20 Valid Parentheses)
LC20 Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
虽然我现在已经养成了看到括号的题目就能想到staack的习惯 但是具体实施的时候还是因为边界条件没想清楚。
不过这道题目可以说是很经典了:遇到左括号就push进去对应的有括号 遇到右括号就检查跟peek的是不是匹配,如果匹配就Pop()
最后检查stack是不是空。
class Solution {
public boolean isValid(String s) {
if (s == null || s.length() == 0) return false;
if (s.length() % 2 == 1) return false;
Stack<Character> stack = new Stack<>();
for (char c: s.toCharArray()) {
System.out.println(c);
if (c == '(') {
stack.push(')');
} else if (c == '[') {
stack.push(']');
} else if (c == '{') {
stack.push('}');
} else if (!stack.isEmpty() && ((c == ')' && stack.peek() == ')') || (c == ']' && stack.peek() == ']') || (c == '}' && stack.peek() == '}') )){
stack.pop();
} else {
return false;
}
}
return stack.isEmpty();
}
}
但是真的是所有的括号题目都用stack吗?所有的stack都是用来解括号相关的题目的吗?
并不是这样的,我记得有一道求最长的valid的括号序列 这道题目跟dp有关。而且stack还可以被用来进行DFS,而且mono stack的方法还可以被用来解决一些数组的问题。

浙公网安备 33010602011771号