1. 程式人生 > 其它 >刪除無效的括號 -- LeetCode -- 10.27

刪除無效的括號 -- LeetCode -- 10.27

刪除無效的括號

給你一個由若干括號和字母組成的字串s,刪除最小數量的無效括號,使得輸入的字串有效。

返回所有可能的結果。答案可以按任意順序返回。

示例 1:

輸入:s = "()())()"
輸出:["(())()","()()()"]

示例 2:

輸入:s = "(a)())()"
輸出:["(a())()","(a)()()"]

示例 3:

輸入:s = ")("
輸出:[""]

暴力搜尋yyds:

class Solution {
public:
    vector<string> ans;
    map<string, int> m;
    int n, k = -1, flag = 0;;
    string s1;
    void dfs(int index, string ss, int sum, int cnt){
        if(index == n){
            if((k == - 1 || cnt == k) && sum == 0){
                if(flag == 0){
                    flag = 1;
                    k = cnt;
                }
                if(m[ss] != 1){
                    ans.push_back(ss);
                    m[ss] = 1;
                }
            }
            return;
        }
        if(s1[index] == ')'){
            if(sum > 0){
                dfs(index + 1, ss + s1[index], sum - 1, cnt + 1);
                dfs(index + 1, ss, sum, cnt);
            }else{
                dfs(index + 1, ss, sum, cnt);
            }
        }else if(s1[index] == '('){
            dfs(index + 1, ss + s1[index], sum + 1, cnt + 1);
            dfs(index + 1, ss, sum, cnt);
        }else{
            dfs(index + 1, ss + s1[index], sum, cnt);
        }                
    }
    vector<string> removeInvalidParentheses(string s) {
        s1 = s;
        n = s.size();
        dfs(0, "", 0, 0);
        return ans;
    }
};