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