美文网首页
20. Valid Parentheses

20. Valid Parentheses

作者: wtmxx | 来源:发表于2018-02-08 12:45 被阅读0次

递归解法

class Solution {
    public boolean isValid(String s) {
        if(s.length()==0)
            return true;
        if(s.length()==1)
            return false;
        boolean result = true;
        if(s.charAt(0)=='('){
            int i = 1,sum = -1; 
            for(;i<s.length();i++){
                if(s.charAt(i)=='('){
                    sum-=1;
                }else if(s.charAt(i)==')'){
                    sum+=1;
                    if(sum==0)break;
                }
            }
            if(i==s.length())
                return false;
            result = isValid(s.substring(1,i));
            if(i<s.length()-1)result=result&&isValid(s.substring(i+1,s.length()));
        }else if(s.charAt(0)=='['){
            int i = 1,sum = -1; 
            for(;i<s.length();i++){
                if(s.charAt(i)=='['){
                    sum-=1;
                }else if(s.charAt(i)==']'){
                    sum+=1;
                    if(sum==0)break;
                }
            }
            if(i==s.length())
                return false;
            result = result&&isValid(s.substring(1,i));
            if(i<s.length()-1)result=result&&isValid(s.substring(i+1,s.length()));
        }else if(s.charAt(0)=='{'){
            int i = 1,sum = -1; 
            for(;i<s.length();i++){
                if(s.charAt(i)=='{'){
                    sum-=1;
                }else if(s.charAt(i)=='}'){
                    sum+=1;
                    if(sum==0)break;
                }
            }
            if(i==s.length())
                return false;
            result = result&&isValid(s.substring(1,i));
            if(i<s.length()-1)result=result&&isValid(s.substring(i+1,s.length()));
        }else{
            return false;
        }
        return result;
    }
}

栈解法

使用栈会快很多

class Solution {
    public boolean isValid(String str) {
        Stack<Character> s = new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            char a = str.charAt(i);
            char b = pair(a);
            if (b == ' ') {
                //System.out.println(a +" " + b);
                if (s.size() == 0 || pair(s.pop()) != a) return false;
            } else {
                s.push(a);
            }
        }
        return s.size() == 0;
    }
    public char pair(char a) {
        switch (a) {
            case '(':
                return ')';
            case '{':
                return '}';
            case '[':
                return ']';
            default:
                return ' ';
        }
    }
}

相关文章

网友评论

      本文标题:20. Valid Parentheses

      本文链接:https://www.haomeiwen.com/subject/gucttftx.html