/** * 栈,先进后出 * 如果栈(栈不为空)中第一个元素为 {、[、( 且 当前从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; }