import java.util.*;

public class Solution {

/**
 * 
 * @param s string字符串 
 * @return bool布尔型
 *使用栈,利用对称的方法判断,具体如下:
 *若字符为'(''{''['时,分别将其存入栈中;若字符为')''}'']'时,将其推出栈,判断是否和对称的'(''{''['相等。若不相等,肯定不是有效字符;若相等,则最后栈变为null。
 */
public boolean isValid (String s) {
    // write code here
    if (s.length() == 1) return false;
    Stack<Character> stack = new Stack<>();
    for (char i:s.toCharArray()) {
        switch (i) {
            case '(':
            case '[':
            case '{':
                stack.push(i);
                break;
            case ')': {
                if (stack.empty() || stack.pop() != '(')
                    return false;
                else
                    break;
            }
            case '}': {
                if (stack.empty() || stack.pop() != '{') //推出栈,并比较是否和'}'对应的'{'相等;
                    return false;
                else
                    break; //一定要有break。
            }
            case ']': {
                if (stack.empty() || stack.pop() != '[')
                    return false;
                else
                    break;
            }
        }

    }
    if(stack.empty()) //若是对称,则全部会被压出,栈为空
        return true;
    else
        return false;
}

}