/**
 * 栈,先进后出
 * 如果栈(栈不为空)中第一个元素为 {、[、(  且 当前从s中取得字符为 }、]、)相对应时出栈
 * 如果当前取出的字符为 {、(、[  时压栈
 * 如果栈为空,当前字符为  )、]、}   返回false
 */
 public static boolean isValid(String s) {
     // s为空
     if (s.length() == 0) {
         return true;
     }
     // 创建栈,存储截取的字符,进行出栈、入栈
     Stack<Character> stack = new Stack<Character>();
     // 将第一个字符入栈
     char c = s.charAt(0);
     stack.push(c);
     //循环取出s中的字符,并进行验证判断
     for (int i = 1; i < s.length(); i++) {
         // 取字符
         c = s.charAt(i);
         // 字符开口朝右时压栈
         if (c == '{' || c == '(' || c == '[') {
             stack.push(c)
             continue;
         }
         // 栈不为空
         if (!stack.empty()) {
             // 取栈口元素
             char temp = stack.peek();
             // 栈口元素与取出的字符匹配时出栈
             boolean con = (temp == '(' && c == ')') || (temp == '{' && c == '}') || (temp == '[' && c == ']');
             if (con) {
                 stack.pop();
                 continue;
             } else {
                 return false;
             }
         } else {
             // 栈为空,且当前字符开口朝左
             if (c == ')' || c == ']' || c == '}') {
                 return false;
             }
         }
     }
     // 判断字符完成后,若栈中仍有元素,说明s不对称
     if (!stack.empty()) {
         return false;
     }
     return true;
 }