删除无效的括号
删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。
class Solution {
public:
bool isValid( string& str ) {
int cnt = 0;
for ( int i = 0; i < str.size(); ++i ) {
if ( str[i] == '(' )
++cnt;
else if ( str[i] == ')' )
--cnt;
if ( cnt < 0 ) return false;
}
return cnt == 0;
}
vector<string> removeInvalidParentheses(string s) {
unordered_set<string> strSet;
vector<string> res;
queue<string> q;
q.push( s );
strSet.insert( s );
bool found = false;
while ( !q.empty() ) {
int size = q.size();
while ( size-- ) {
string str = q.front();
q.pop();
if ( isValid( str ) ) {
res.push_back( str );
found = true;
}
if ( found ) continue;
for ( int i = 0; i < str.size(); ++i ) {
if ( str[i] == '(' || str[i] == ')' ) {
string tempStr = str.substr( 0, i ) + str.substr( i + 1 );
if ( strSet.count( tempStr) == 0 ) {
q.push( tempStr );
strSet.insert( tempStr );
}
}
}
}
if ( found ) break;
}
return res;
}
};