您的位置:首页 > 其它

leetcode Remove Invalid Parentheses

2015-12-01 20:06 375 查看
原题链接:https://leetcode.com/problems/remove-invalid-parentheses/

Description

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())()”]

“)(” -> [“”]

bfs爆搜。。

class Solution {
public:
vector<string> removeInvalidParentheses(string s) {
unordered_map<string, bool> vis;
ans.clear();
vector<string> res;
len = s.length();
vis[s] = true;
queue<string> q;
q.push(s);
bool find = false;
while (!q.empty()) {
string tmp = q.front(); q.pop();
len = tmp.length();
if (isOk(tmp)) {
res.push_back(tmp);
find = true;
}
if (find) continue;
for (size_t i = 0; i < len; i++) {
string x = tmp.substr(0, i) + tmp.substr(i + 1);
if (vis.find(x) == vis.end()) {
vis[x] = true;
q.push(x);
}
}
}
int n, val = -1;
if (!(n = res.size())) return ans;
val = res[0].size();
for (int i = 0; i < n; i++) {
if (res[i].size() == val) ans.push_back(res[i]);
else break;
}
return ans;
}
private:
size_t len;
vector<string> ans;
bool isOk(string s) {
stack<char> q;
for (size_t i = 0; i < len; i++) {
if (s[i] == '(') q.push('(');
if (s[i] == ')') {
if (!q.empty() && q.top() == '(') q.pop();
else q.push(')');
}
}
return q.empty();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: