讨论/《初级算法》 - 有效的括号/
《初级算法》 - 有效的括号

image.png

递归法

class Solution {
    public boolean isValid(String s) {
        if(s == null || s.length() == 0){
            return true;
        }
        if(s.length()%2 != 0){
            return false;
        }
        int l = -1,r = 10001;
        for(int i = 1;i<s.length();i++){
            if(s.charAt(i) == getCh(s.charAt(i-1))){
                l = i-2;
                r = i+1;
                break;
            }
        }
        if(r == 10001){
            return false;
        }
        while(l >= 0 && r < s.length()){
            if(s.charAt(r) != getCh(s.charAt(l))){
                break;
            }
            l--;
            r++;
        }
        StringBuilder s1 = new StringBuilder();
        if(l>=0){
            s1.append(s.substring(0,l+1));
        }
        if(r<s.length()){
            s1.append(s.substring(r,s.length()));
        }
        return isValid(s1.toString());
    }
    private char getCh(char x){
        switch (x) {
            case '(':
                return ')';
            case '[':
                return ']';
            case '{':
                return '}';
            default:
                return ' ';
        }
    }
}

展开全部 15 讨论