# LeetCode Remove Invalid Parenthese

LeetCode 每日刷题！！

Remove Invalid Parentheses

#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

• u014673347
• 2016年02月18日 10:44
• 936

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

• qq508618087
• 2015年12月26日 16:00
• 3935

## LeetCode 301 Remove Invalid Parentheses (BFS + 剪枝)

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

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

• u010900754
• 2017年02月21日 12:32
• 371

## [LeetCode]Valid Parenthese

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the in...
• 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
• 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
• 2016年05月26日 22:41
• 495

## leetcode刷题，总结，记录，备忘 301

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

## LeetCode || Remove Element

Remove Element  Total Accepted: 11841 Total Submissions: 36675My Submissions Given an ar...
• 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
• 2016年06月08日 15:16
• 648

举报原因： 您举报文章：LeetCode Remove Invalid Parenthese 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)