题目:
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 }
reference: http://www.cnblogs.com/springfor/p/3869420.html