删除无效的括号 -- 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;
}
};

浙公网安备 33010602011771号