思路
按照题目的要求,正确的输入一定是会正确关闭的。可知这个序列有几个特点:
- 长度是偶数,是奇数一定是错的;
- 左括号和右括号是一致的;
- 一定会有一对括号是写在一起的。
比如这样的就是不对的:[(]),因为没有一对是在一起的。
首先需要将字符串变成一个字符数组,遍历之。遵循下述的原则:
- 遇到左括号,将对应的右括号压栈;
- 遇到右括号,则弹栈,栈顶元素如果和该右括号不相等或者栈根本就是空,则返回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(); }