# 删除无效的括号

<p>给你一个由若干括号和字母组成的字符串 <code>s</code> ，删除最小数量的无效括号，使得输入的字符串有效。</p>

<p>返回所有可能的结果。答案可以按 <strong>任意顺序</strong> 返回。</p>

<p> </p>

<p><strong>示例 1：</strong></p>

<pre>
<strong>输入：</strong>s = "()())()"
<strong>输出：</strong>["(())()","()()()"]
</pre>

<p><strong>示例 2：</strong></p>

<pre>
<strong>输入：</strong>s = "(a)())()"
<strong>输出：</strong>["(a())()","(a)()()"]
</pre>

<p><strong>示例 3：</strong></p>

<pre>
<strong>输入：</strong>s = ")("
<strong>输出：</strong>[""]
</pre>

<p> </p>

<p><strong>提示：</strong></p>

<ul>
	<li><code>1 <= s.length <= 25</code></li>
	<li><code>s</code> 由小写英文字母以及括号 <code>'('</code> 和 <code>')'</code> 组成</li>
	<li><code>s</code> 中至多含 <code>20</code> 个括号</li>
</ul>


## template

```java
public class Solution {

	private Set<String> set;

	private String input;

	private int maxLen = 0;

	public List<String> removeInvalidParentheses(String s) {
		set = new HashSet<>();
		input = s;
		removeInvalidParentheses(0, "", 0, 0);
		return new ArrayList<>(set);
	}

	private void removeInvalidParentheses(int index, String valid, int leftCount, int rightCount) {
		if (leftCount < rightCount) {
			return;
		}
		if (index == input.length()) {
			if (leftCount == rightCount) {
				if (maxLen < valid.length()) {
					maxLen = valid.length();
					set.clear();
					set.add(valid);
				} else if (maxLen == valid.length()) {
					set.add(valid);
				}
			}
			return;
		}
		char c = input.charAt(index);
		if (c == '(') {
			removeInvalidParentheses(index + 1, valid, leftCount, rightCount);
			removeInvalidParentheses(index + 1, valid + c, leftCount + 1, rightCount);
		} else if (c == ')') {
			removeInvalidParentheses(index + 1, valid, leftCount, rightCount);
			removeInvalidParentheses(index + 1, valid + c, leftCount, rightCount + 1);
		} else {
			removeInvalidParentheses(index + 1, valid + c, leftCount, rightCount);
		}
	}

}

```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```