import java.util.*;

public class Solution {
    public boolean isValid (String s) {
        // 预处理
        if (s.length() == 0) return true;
        if (s.length() % 2 == 1) return false;

        // 初始化
        Stack<Character> stack = new Stack<>();

        // 遍历字符串
        for (char c : s.toCharArray()) {
            switch (c) {
                case '(':
                    stack.push(')'); // 期望匹配右小括号
                    break;
                case '[':
                    stack.push(']'); // 期望匹配右中括号
                    break;
                case '{':
                    stack.push('}'); // 期望匹配右大括号
                    break;
                default:
                    if (stack.isEmpty() || stack.pop() != c) return false;              
            }
        } // 遍历结束

        // 此时栈空则合法
        return stack.isEmpty();
    }
}