题型:栈
题目:
代码:
public boolean isValidReview(String s) {
//(1)从s的i=0位置一次开始压栈,遇到左括号压栈,不管是大中小三种,左括号,压
//(2)遇到右括号,不论大中小括号三种,只要是右括号,就弹出一个括号,必须还要和当前括号匹配才行
//(3)一旦无法匹配就false,全体都匹配上了就是true,非常简单!
if (s.compareTo("") == 0 || s.length() == 0) return true;
if (s.length() < 2) return false;
Stack<Character> stack = new Stack<>();
int N = s.length();
for (int i = 0; i < N; i++) {
char c = s.charAt(i);
if (c == '(' || c == '[' || c == '{') stack.push(c);
else {
//右括号弹出对比
if (stack.isEmpty()) return false;//提前就发现没了,说明问题大了,缺呀
char left = stack.pop();
if ((left == '(' && c == ')') ||
(left == '[' && c == ']') ||
(left == '{' && c == '}')) continue; // 注意这里是continue.
else return false;//如果不满足其中一种匹配的条件,失败
}
}
//全部通过,则OK
return stack.isEmpty(); // 注意最终返回条件
}