import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
            //创建两个数组一个存左括号,一个存右括号
            String[] str1={"(","{","["};
            String[] str2={")","}","]"};
            Stack<String> stack1 = new Stack<String>();
            String[] arr=s.split("");
            //遍历数组
            for(int i=0;i<arr.length;i++){
                //如果字符串在左括号集合中,则直接压栈
                if(contains(arr[i],str1)!=-1){
                    stack1.push(arr[i]);
                //如果字符串在右括号集合中
                }else if(contains(arr[i],str2)!=-1){
                        //栈为不为空,进行下一步判断
                    if(!stack1.isEmpty()){
                        //如果栈顶和当前字符串构成一对括号则将栈顶元素弹出,否则将当前字符串压栈
                        if(contains(arr[i],str2)==contains(stack1.peek(),str1)){
                            stack1.pop();
                        }else{
                            stack1.push(arr[i]);
                        }
                    }else{
                        //栈为空则将当前字符串压栈
                        stack1.push(arr[i]);
                    }
                }
            }
            if(stack1.isEmpty()){
                return true;
            }
            return false;
    }
    //查看数组中是否有该字符串
    public int contains(String s,String[] str){
            for(int i=0;i<str.length;i++){
                if(str[i].equals(s)){
                    return i;
                }
            }
        return -1;
    }
}