import java.util.*;


public class Solution {
    /**
     *
     * @param s string字符串
     * @return bool布尔型
     */
  	//规律,要想压入右括号必先与在他之前最右侧的左括号配对
	//创建两个数组,分别存左括号和右括号,并且配对括号在数组的下标是相同的
	//将输入字符串拆分成字符数组,
	//创建一个的栈只入左括号
	//遍历数组判断左括号是入栈还是出栈操作,否则配对失败
    public boolean isValid (String s) {
        String [] a1 = {"(", "[", "{"};
        String [] a2 = {")", "]", "}"};
        String[] arr = s.split("");
        Stack<String> stack = new Stack<String>();
        for (int i = 0; i < arr.length; i++) {
            if (contain(a1, arr[i]) != -1) {//如果该字符是左括号则入栈
                stack.push(arr[i]);
            }/如果该字符是右括号且该栈不能没有左括号且左括号得和栈顶的左括号配对成功
		  else if ((contain(a2, arr[i]) != -1) && !stack.isEmpty() &&
                       contain(a2, arr[i]) == contain(a1, stack.peek())) {
                stack.pop();
            } else {
                return false;
            }
        }
        if (stack.isEmpty())
            return true;
        else
            return false;

    }
    static int contain(String [] arr, String s) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].equals(s))
                return i;
        }
        return -1;

    }
}