有效的括号
题目
版本1 正确
public boolean isValid(String s) {
// 判断括号是否有效
// 利用一个栈, 遇见左括号就添加, 遇见右括号就弹出栈顶的元素判断是否相等
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i ++) {
char temp = s.charAt(i);
if (temp == '(' || temp == '[' || temp == '{') {
stack.push(temp);
} else {
// 需要考虑栈为空的情况
if (stack.size() == 0) {
return Boolean.FALSE;
}
char beforeLeft = stack.pop();
if (beforeLeft != findLeft(temp)) {
return Boolean.FALSE;
}
}
}
return stack.size() == 0;
}
// 根据右括号, 返回需要的左括号
public char findLeft(char right) {
if (right == ')') {
return '(';
}else if (right == '}') {
return '{';
} else {
return '[';
}
}
正确的原因
(1) 需要考虑栈为空的情况, 然后直接遇见右边括号
(2) 最后判断为true的时候, 栈里面不应该有元素