题目
题解
- 我在不知道用栈解法之前对这个题无从下抓,当我知道这种解法的时候,只一次我每次都能正确的写出这个题解,很好理解。
- 初始化一个栈,循环整个字符,当发现是 “(” 和 “[” 和 “{” 依次往栈里面对应的另一半也就是“)”和 “]” 和 “}” 。
- 除过这三种情况判断栈是否空了,如果是空那么就是我有右括号,你栈里面没有对应的左括号,如果不为空让栈顶元素出栈,和当前元素比较,如果不相等那么就是当前这一对括号不匹配,这两种情况都返回false。
- 反之栈不为空,栈顶元素和当前循环的值相等说明匹配上了,继续用相同的方法匹配下一个值。整个循环完之后如果栈是空的说明正好全部匹配完返回true,如果栈不是空说明有多余的左括号返回false。
图解
代码
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
备注
本文正在参与「掘金 2021 春招闯关活动」, 点击查看。