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.
Solution:
BFS, 使用validParenthese判断是否合法括号。如果不是合法,则依次去掉第i个括号继续判断。
1 vector<string> removeInvalidParentheses(string s) 2 { 3 vector<string> ret; 4 unordered_set<string> visit; 5 queue<string> Q; 6 Q.push(s); 7 visit.insert(s); 8 9 bool found = false; 10 while (!Q.empty()) 11 { 12 string ts = Q.front(); 13 Q.pop(); 14 if (validParenthese(ts)) // valid parenthese, continue 15 { 16 ret.push_back(ts); 17 found = true; 18 } 19 if (found == true) 20 continue; 21 22 for (int i = 0; i < ts.size(); i++) 23 { 24 if ((ts[i] != ‘(‘) && (ts[i] != ‘)‘)) 25 continue; 26 string temp = ts.substr(0, i) + ts.substr(i + 1); 27 if (visit.find(temp) == visit.end()) 28 { 29 visit.insert(temp); 30 Q.push(temp); 31 } 32 } 33 } 34 35 return ret; 36 } 37 38 bool validParenthese(string s) 39 { 40 int mleft = 0; 41 for (int i = 0; i < s.size(); i++) 42 { 43 if (s[i] == ‘(‘) 44 mleft++; 45 if (s[i] == ‘)‘) 46 mleft--; 47 if (mleft < 0) 48 return false; 49 } 50 51 return (mleft == 0); 52 }
时间: 2024-10-13 22:20:40