Sunday, November 24, 2013

Valid parentheses LeetCode

这道题之所以愿意面试总出,俺个人认为可以有不同的写法,比如我就用了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