class Solution {
public boolean isValid(String s) {
// 字符串中出现左括号就将右括号压入栈中,
// 出现右括号就与栈顶的元素匹配,判断栈顶的元素是不是对应的右括号
// 不匹配则返回false
// 最终需要检查栈是否为空
// 不为空说明还有未匹配的左括号
Deque<Character> stack = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
stack.push(s.charAt(i));
} else {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if (s.charAt(i) == ']' && top != '[' || (s.charAt(i) == '}' && top != '{') || (s.charAt(i) == ')' && top != '(')) {
return false;
}
}
}
return stack.isEmpty(); //不匹配说明有多余的左括号
}
}