LeetCode Remove Invalid Parenthese

原创 2015年11月17日 22:17:04

LeetCode 每日刷题!!

Remove Invalid Parentheses

这道题在做的时候用到了BFS因为它要求的是最优解

层次依次为删除0个元素,1个元素,2个元素。。。

如果在一层找到符合要求的就返回

在做的时候考虑效率问题,要对BFS进行剪枝,不然会timelimit, 使用的方法一:出现过的就加入visited里面不再加入叶子节点,二:visited用hash,提高查找效率


#include <iostream>
#include <stdio.h>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <queue>
#include <stack>
#include <assert.h>
#include <set>
using namespace std;

class Solution {
public:
	vector<string> removeInvalidParentheses(string s) {
		set<string> visited;
		string *current = &s;
		vector<string> ans;
		vector<string> layerSet;
		vector<string> nextlayer;
		if (s == "")
		{
			ans.push_back("");
			return ans;
		}
		layerSet.push_back(s);

		while (layerSet.size() != 0)
		{
			//each layer of a BFT, the optimize have the least delete number
			//and each loop have the same delete num.
			for (int i = 0; i < layerSet.size(); i++)
			{
				*current = layerSet[i];
				if (isValid(*current))
				{
					ans.push_back(*current);
				}
				
			}
			if (ans.size() != 0)
			{
				return ans;
			}
			for (int i = 0; i < layerSet.size(); i++)
			{
				*current = layerSet[i];
				for (int i = 0; i < current->size(); i++)
				{
					if ((*current)[i] != '(' && (*current)[i] != ')')
					{
						continue;
					}
					string tmp = current->substr(0, i) + current->substr(i + 1);
					if (tmp == "")
					{
						ans.push_back("");
						return ans;
					}
					
					if (visited.find(tmp) == visited.end())
					{
						nextlayer.push_back(tmp);
						visited.insert(tmp);
					}

				}
			}
			layerSet.swap(nextlayer);
			
		}
		return ans;
	}

	bool isValid(string s)
	{
		int num = 0;
		if (s.size() == 0)
		{
			return false;
		}
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] == '(') {
				num++;
			}
			if (s[i] == ')') {
				num--;
			}
			if (num < 0)
				return false;
		}
		return num == 0;
	}
};

int main()
{
	string test1 = ")()m)(((()((()((((";
	vector<string> ans;
	Solution *solu = new Solution();
	ans = solu->removeInvalidParentheses(test1);
	for (int i = 0; i < ans.size(); i++)
	{
		cout << ans[i] << endl;
	}

	system("pause");
	return 0;


}


[leetcode] 301. Remove Invalid Parentheses

题目: Remove the minimum number of invalid parentheses in order to make the input string valid. Retur...
  • u014673347
  • u014673347
  • 2016年02月18日 10:44
  • 936

[leetcode] 301. Remove Invalid Parentheses 解题报告

题目链接:https://leetcode.com/problems/remove-invalid-parentheses/ Remove the minimum number of invali...
  • qq508618087
  • qq508618087
  • 2015年12月26日 16:00
  • 3935

LeetCode 301 Remove Invalid Parentheses (BFS + 剪枝)

LeetCode 301 Remove Invalid Parentheses (BFS + 剪枝)
  • Tc_To_Top
  • Tc_To_Top
  • 2016年10月08日 09:39
  • 693

【Leetcode】301. Remove Invalid Parentheses 移除非法小括号

题目https://leetcode.com/problems/remove-invalid-parentheses/?tab=Solutions。 题意是给出一个string,其中的小括号可能不配对...
  • u010900754
  • u010900754
  • 2017年02月21日 12:32
  • 371

[LeetCode]Valid Parenthese

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the in...
  • hyc__
  • hyc__
  • 2014年11月15日 00:11
  • 423

[LeetCode] Remove Invalid Parentheses

Remove the minimum number of invalid parentheses in order to make the input string valid. Return all...
  • u011331383
  • u011331383
  • 2015年11月09日 16:45
  • 8208

leetcode.301. Remove Invalid Parentheses

Remove the minimum number of invalid parentheses in order to make the input string valid. Return all...
  • happyxuma1991
  • happyxuma1991
  • 2016年05月26日 22:41
  • 495

leetcode刷题,总结,记录,备忘 301

leetcode301Remove Invalid Parentheses Remove the minimum number of invalid parentheses in order to...
  • guicaisa
  • guicaisa
  • 2016年05月02日 20:23
  • 369

LeetCode || Remove Element

Remove Element  Total Accepted: 11841 Total Submissions: 36675My Submissions Given an ar...
  • jiadebin890724
  • jiadebin890724
  • 2014年04月09日 23:26
  • 3168

(Java)LeetCode-27. Remove Element

Given an array and a value, remove all instances of that value in place and return the new length. ...
  • u012848330
  • u012848330
  • 2016年06月08日 15:16
  • 648
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Remove Invalid Parenthese
举报原因:
原因补充:

(最多只允许输入30个字)