*
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
1 class Solution20 {
2
3 public boolean isValid(String s) {
4 if (s == null) {
5 return false;
6 }
7 Stack<Character> stack = new Stack<>();
8 for (int i = 0; i < s.length(); i++) {
9 char ch = s.charAt(i);
10 if (ch == '[' || ch == '{' || ch == '(') {
11 stack.push(ch);
12 } else {
13 if (stack.isEmpty()) {
14 return false;
15 }
16 switch (ch) {
17 case ')':
18 if (stack.peek() == '(') {
19 stack.pop();
20 break;
21 } else {
22 return false;
23 }
24 case '}':
25 if (stack.peek() == '{') {
26 stack.pop();
27 break;
28 } else {
29 return false;
30 }
31 case ']':
32 if (stack.peek() == '[') {
33 stack.pop();
34 } else {
35 return false;
36 }
37 }
38 }
39 }
40 return stack.isEmpty();
41 }
42 }
注意空字符串可被认为是有效字符串。
*/
/*
思路: 时间复杂度O(n)
将左括号放入栈中,如果是右括号,判断当前栈顶元素是否和当前有括号类型一致。
每有一个有括号与栈顶左括号匹配,就将左括号弹出。
栈为空表示每一个右括号都匹配到了左括号,当然如果栈中没有任何左括号却出现了右括号,直接返回false就可以。
*/