码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode] 301. Remove Invalid Parentheses

时间:2016-07-23 16:31:05      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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     }

 

[leetcode] 301. Remove Invalid Parentheses

标签:

原文地址:http://www.cnblogs.com/ym65536/p/5698769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!