20. 有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。


思路比较简单,就是用栈。

这里用map存了括号的配对,这里在new的时候进行了初始化赋值,可以记住这个用法。这里的双{}是用的匿名内部类,第一个括号为匿名内部类,第二个括号为实例初始化块。

这种写法代码比较简单,但执行效率比普通初始化低。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {

private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
put('}','{'); put(']','['); put(')','(');
}};

public boolean isValid(String s) {
int len = s.length();
char[] c = s.toCharArray();
int idx = 0;
LinkedList<Character> stack = new LinkedList<>();
for (int i = 0; i < len; i++) {
if (map.containsKey(c[i])) {
if (stack.isEmpty() || stack.peek() != map.get(c[i])) {
return false;
}
stack.pop();
} else {
stack.push(c[i]);
}
}
return stack.isEmpty();
}
}