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(); //不匹配说明有多余的左括号

       
    }
}