import java.util.*;


public class Solution {
    /**
     * 用压栈弹栈的方式来实现
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        Stack<Character> stack = new Stack<Character>();
        for(char c: s.toCharArray()){
            //如果碰到左括号,就把相应的右括号入栈
            if(c == '(')
                stack.push(')');
            else if(c == '[')
                stack.push(']');
            else if(c == '{')
                stack.push('}');
            //如果碰到右括号,判断是否与栈顶元素匹配
            //若栈为空或者c与栈顶不匹配,则该序列不合法
            else if(stack.isEmpty() || c != stack.pop())
                return false;
        }
        //出循环后栈必定为空,则可判断该序列合法
        return stack.isEmpty();
    }
}