您的位置:首页 > 其它

Remove Invalid Parentheses

2017-05-06 13:58 183 查看

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


解析:
类似于按层遍历二叉树,每次查看队列中相同长度的字符串看是否有符合要求的,有的话判断结束,没有的话,把字符串长度减1的串进队列,

代码:

class Solution {
public:

bool valid(string s)
{
if (s.empty()) return true;

int count=0;
for (int i=0; i<s.size(); i++)
{
if ((s[i]!='(')&&(s[i]!=')'))
continue;
if (s[i]=='(')
count++;
else
{
count--;
if (count<0)
break;
}

}
if (count==0)
{
return true;
}
else
return false;
}

vector<string> removeInvalidParentheses(string s) {
vector<string>ans;

if (s.size()==0)
{
ans.push_back(s);
return ans;
}
queue<string>que;
que.push(s);
unordered_map<string,int>vis;
vis[s]=1;

while(!que.empty())
{
int cnt=que.size();
for (int i=0; i<cnt; i++)
{
string temp=que.front();
if (valid(temp))
{
ans.push_back(temp);
}
que.pop();
for (int j=0; j<temp.size(); j++)
{
if (!vis[temp.substr(0,j)+temp.substr(j+1)])
{
vis[temp.substr(0,j)+temp.substr(j+1)]++;
que.push(temp.substr(0,j)+temp.substr(j+1));
}
}
}
if (!ans.empty())
return ans;

}
return ans;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Remove Invalid Paren