题目:
Given a string containing just the characters ‘(‘
, ‘)‘
, ‘{‘
, ‘}‘
, ‘[‘
and ‘]‘
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
题解:
这道题是一道很常见的老题,记得当时看严蔚敏的数据结构还有数据结构课上面都见过这道题,一道训练栈的基础题。
解题方法是:
一个个检查给的characters,如果是左括号都入栈;如果是右括号,检查栈如果为空,证明不能匹配,如果栈不空,弹出top,与当前扫描的括号检查是否匹配。
全部字符都检查完了以后,判断栈是否为空,空则正确都匹配,不空则证明有没匹配的。
注意:
检查字符是用==,检查String是用.isEqual(),因为String是引用类型,值相等但是地址可能不等。
代码如下:
1 public boolean isValid(String s) {
2 if(s.length()==0||s.length()==1)
3 return false;
4
5 Stack<Character> x = new Stack<Character>();
6 for(int i=0;i<s.length();i++){
7 if(s.charAt(i)==‘(‘||s.charAt(i)==‘{‘||s.charAt(i)==‘[‘){
8 x.push(s.charAt(i));
9 }else{
10 if(x.size()==0)
11 return false;
12 char top = x.pop();
13 if(s.charAt(i)==‘)‘)
14 if(top!=‘(‘)
15 return false;
16 else if(s.charAt(i)==‘}‘)
17 if(top!=‘{‘)
18 return false;
19 else if(s.charAt(i)==‘]‘)
20 if(top!=‘[‘)
21 return false;
22 }
23 }
24 return x.size()==0;
25 }
2 if(s.length()==0||s.length()==1)
3 return false;
4
5 Stack<Character> x = new Stack<Character>();
6 for(int i=0;i<s.length();i++){
7 if(s.charAt(i)==‘(‘||s.charAt(i)==‘{‘||s.charAt(i)==‘[‘){
8 x.push(s.charAt(i));
9 }else{
10 if(x.size()==0)
11 return false;
12 char top = x.pop();
13 if(s.charAt(i)==‘)‘)
14 if(top!=‘(‘)
15 return false;
16 else if(s.charAt(i)==‘}‘)
17 if(top!=‘{‘)
18 return false;
19 else if(s.charAt(i)==‘]‘)
20 if(top!=‘[‘)
21 return false;
22 }
23 }
24 return x.size()==0;
25 }