这道题之所以愿意面试总出,俺个人认为可以有不同的写法,比如我就用了O(n)的空间写了一下,这样代码很简单。
思路: 用一个Stack去存放左括号,如果碰到右括号,就看stack中的顶部是否跟该右括号match,如果不match返回false;最后判断stack中是否为空。直接上code,我认为是非常容易在面试中写出来的code,我写了一遍,只出现了一个小的语法错误。
这个思路非常常用,类似的有那个simplify path 和 reverse polish notation都是类似的思想。
public boolean isValid(String s) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
Stack<Character> left = new Stack<Character>();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c=='(' || c=='[' || c=='{'){
left.push(c);
}else{
if(left.size()==0)return false;
char top = left.peek();
if(c==')'){
if(top != '(') return false;
}else if(c==']'){
if(top != '[') return false;
}else{
if(top != '{') return false;
}
left.pop();
}
}
return left.size()==0;
}
No comments:
Post a Comment