import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        //临界条件
        if(s.length() < 2) {
            return false;
        }
        Map<Character,Character> map = new HashMap<>();
        map.put('}','{');
        map.put(')','(');
        map.put(']','[');
        //辅助栈用来模拟入栈出栈判断是否是闭合序列
        Stack<Character> stack = new Stack<>();
        for(char c : s.toCharArray()) {
		    //flag用于判断括号序列是否入栈
            boolean flag = false;
            if(map.containsKey(c)) {
                //当栈为空 并且出栈元素不等于当前value
                if(stack.isEmpty() || stack.pop() != map.get(c)) {
                    return false;
                } else {
                    flag = true;
                }
            }
            if(!flag) {
                stack.push(c);
            }
        }
        return stack.isEmpty();
    }
}