https://leetcode.com/problems/remove-invalid-parentheses/?tab=Description
用最少的操作,得到括号为valid的所有结果
用found记录是否已经找到过结果了,如果已经找到过了就不再对当前str进行分解。visit记录已访问过的,queue记录待访问的。
public class Solution {
public List<String> removeInvalidParentheses(String s) {
List<String> res = new LinkedList();
Queue<String> queue = new LinkedList();
HashSet<String> visit = new HashSet();
boolean found = false;
queue.offer(s);
visit.add(s);
while (!queue.isEmpty()) {
String str = queue.poll();
if (valid(str)) {
res.add(str);
found = true;
}
if (found) {
continue;
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != '(' && c != ')') {
continue;
}
String temp = str.substring(0, i) + str.substring(i + 1);
if (!visit.contains(temp)) {
queue.add(temp);
visit.add(temp);
}
}
}
return res;
}
private boolean valid(String s) {
int count = 0;
for (int i = 0; i < s.length() && count >= 0; i++) {
char c = s.charAt(i);
if (c == '(') {
count++;
} else if (c == ')') {
count--;
}
}
return count == 0;
}
}