您的位置:首页 > 其它

Leetcode214: Remove Invalid Parentheses

2016-01-04 21:07 288 查看
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.

Note: The input string may contain letters other than the parentheses
(
and
)
.

Examples:

"()())()" -> ["()()()", "(())()"]
"(a)())()" -> ["(a)()()", "(a())()"]
")(" -> [""]

class Solution {
public:
void search(string& s, unordered_set<string>& res_set, string& temp, int curr, int open, int s_sz, int& max_valid_len, bool left_deleted){
// dfs
if(s_sz-curr<open) return;
if(curr == s_sz){
if(temp.length()>=max_valid_len && res_set.find(temp) == res_set.end()){
max_valid_len = temp.length();
res_set.insert(temp);
}
return;
}
if(s[curr] != '(' && s[curr] != ')'){
temp += s[curr];
search(s, res_set, temp, curr+1, open, s_sz, max_valid_len, left_deleted);
temp.pop_back();
return;
}
if(s[curr] == '('){
temp += "(";
search(s, res_set, temp, curr+1, open+1, s_sz, max_valid_len, left_deleted);
temp.pop_back();
search(s, res_set, temp, curr+1, open, s_sz, max_valid_len, true);
}
else{
if(!(s[curr] == ')' && open==0)){
temp += ')';
search(s, res_set, temp, curr+1, open-1, s_sz, max_valid_len, left_deleted);
temp.pop_back();
}
if(!left_deleted){
search(s, res_set, temp, curr+1, open, s_sz, max_valid_len, left_deleted);
}
}
}

vector<string> removeInvalidParentheses(string s) {
vector<string> res;
int sz = s.length();
unordered_set<string> res_set;
string temp = "";
int max_valid_len = 0;
search(s, res_set, temp, 0, 0, sz, max_valid_len, false);
for(string a:res_set) res.push_back(a);
return res;
}
};


有待思考。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: