题目连接
https://leetcode.com/problems/remove-invalid-parentheses/
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(); } };
时间: 2024-10-10 03:04:35