刪除無效的括號 -- LeetCode -- 10.27
阿新 • • 發佈:2021-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; } };