标签:
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())()"] ")(" -> [""]
Credits:
Special thanks to @hpplayer for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
class Solution { public: vector<string> removeInvalidParentheses(string s) { vector<string> res; unordered_map<string, int> visited; queue<string> q; q.push(s); ++visited[s]; bool found = false; while (!q.empty()) { s = q.front(); q.pop(); if (isValid(s)) { res.push_back(s); found = true; } if (found) continue; for (int i = 0; i < s.size(); ++i) { if (s[i] != ‘(‘ && s[i] != ‘)‘) continue; string t = s.substr(0, i) + s.substr(i + 1); if (visited.find(t) == visited.end()) { q.push(t); ++visited[t]; } } } return res; } bool isValid(string t) { int cnt = 0; for (int i = 0; i < t.size(); ++i) { if (t[i] == ‘(‘) ++cnt; if (t[i] == ‘)‘ && cnt-- == 0) return false; } return cnt == 0; } };
此题还有DFS的解法(未完待续。。。)
类似题目:
Different Ways to Add Parentheses
参考资料:
https://leetcode.com/discuss/67842/share-my-java-bfs-solution
https://leetcode.com/discuss/67825/backtracking-trick-here-eliminate-duplicates-without-map
https://leetcode.com/discuss/67821/dfs-and-bfs-java-solutions
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Remove Invalid Parentheses 移除非法括号
标签:
原文地址:http://www.cnblogs.com/grandyang/p/4944875.html