質問の意味:
これは、括弧文字列、すべての法定最低括弧を除去した後に得られる文字列内の小文字を与える可能性があります。
アイデア:
DFS。統計ブラケット、必要性が現在の場所に通過する最後の位置からの文字を削除するには、再帰的に次の質問に、すべての文字を削除しようとすることができます。
コード:
class Solution {
public:
vector<string> ans;
vector<string> removeInvalidParentheses(string s) {
dfs(s, ')', 0);
return ans;
}
void dfs(string s, char pa, int last) {
for (int i=0, cnt=0; i<s.length(); ++i) {
if (s[i] == '(' || s[i] == ')') s[i] == pa ? cnt++ : cnt--;
if (cnt <= 0) continue;
for (int j=last; j<=i; ++j) {
if (s[j] == pa && (j == last || s[j-1] != pa)) {
dfs(s.substr(0, j)+s.substr(j+1), pa, j);
}
}
return;
}
reverse(s.begin(), s.end());
if (pa == ')') dfs(s, '(', 0);
else ans.push_back(s);
return;
}
};
難しいです。長い時間をお読みください。
参考リンク:https://blog.csdn.net/qq508618087/article/details/50408894