题解:Remove Invalid Parentheses

题目如下:

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())()"]
")(" -> [""]

使用宽度优先搜索解决,代码如下:

class Solution {
public:
	bool judge(string s) {
	    int flag = 0;
	    for(int i = 0; i < s.size(); i++) {
	        if (s[i] == '(') flag++;
			else if (s[i] == ')') {
	            if (flag > 0) flag--;
	            else
	            return false;
	        }
	    }
	    if (flag == 0) return true;
	    else
	    return false;
	}

    vector<string> removeInvalidParentheses(string s) {
    	vector<string> result;
        queue<string> q;
	    q.push(s);
	    while(!q.empty()) {
	    	bool flag = false;
	        unordered_set<string> se;
	        int size = q.size();
	        for(int i = 0; i < size; i++) {
	            string q0 = q.front();
	            if(judge(q0)) {
	                result.push_back(q0);
	                flag = true;
	            }
		        q.pop();
		        if(!flag) {
		            for(int l = 0; l < q0.size(); l++) {
		                if(q0[l] == '(' || q0[l] == ')') {
		                	string t = q0.substr(0, l) + q0.substr(l + 1);
		                	if(se.find(t) == se.end()) {
		                            se.insert(t);
		                            q.push(t);
		                    }
		                }
		            }
		        }
	    	}
	        if(flag)
	        return result;
	    }
	}
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值