要明白给你的括号是肯定是有一定的规律的
{([]{}())}
你可以看出来,如果正确的话,每一个左括号对应一个右括号,反之则是错误的
在这道题如何使用栈呢?
在这个例子中
{([]{}())}
凡是左括号 入栈,右括号 从栈中取出对应的,往往对应的左括号就在栈的第一个元素。
---
第一个 {, 入栈 ,栈中 {
第二个 ( , 入栈,栈中 ({
第三个 [, 入栈,栈中 [({
第四个 ], 弹栈 [ ,则栈中 ({
...
---
由此你可以看出来,当需要弹栈的时候,对用的左括号刚好在栈顶
在此题中,如果把最后一个元素也遍历完,栈中为空的时候,返回true,
如果,栈为空了,当前遍历的是右括号,返回false
代码如下:
```
import java.util.*;
public class Main {
public boolean isValid(String s) {
Stack<Character> sta = new Stack<>();
char[] chars = s.toCharArray();
for (char a : chars) {
if (a == '(' || a == '{' || a == '[') {
sta.push(a);
} else {
if (!sta.isEmpty()) {
if (a == ')') {
if (sta.pop() != '(')
return false;
}
if (a == '}') {
if (sta.pop() != '{')
return false;
}
if (a == ']') {
if (sta.pop() != '[')
return false;
}
} else {
return false;
}
}
}
return sta.isEmpty();
}
}
```