思路
按照题目的要求,正确的输入一定是会正确关闭的。可知这个序列有几个特点:
- 长度是偶数,是奇数一定是错的;
- 左括号和右括号是一致的;
- 一定会有一对括号是写在一起的。
比如这样的就是不对的:[(]),因为没有一对是在一起的。
首先需要将字符串变成一个字符数组,遍历之。遵循下述的原则:
- 遇到左括号,将对应的右括号压栈;
- 遇到右括号,则弹栈,栈顶元素如果和该右括号不相等或者栈根本就是空,则返回false,这个字符串不合法;
- 当数组遍历完成之后,这个栈应该是空的,否则就返回false。
代码
private boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
for (char aChar : chars) {
if (aChar == '(') {
stack.push(')');
} else if (aChar == '[') {
stack.push(']');
} else if (aChar == '{') {
stack.push('}');
} else if (stack.isEmpty() || stack.pop() != aChar) {
return false;
}
}
return stack.isEmpty();
} 
京公网安备 11010502036488号