class Solution {
public String minRemoveToMakeValid(String s) {
Deque<Integer> stack = new ArrayDeque<>();
Set<Integer> indexesToRemove = new HashSet<>();
char[] input = s.toCharArray();
for (int i = 0; i < input.length; i++) {
char ch = input[i];
if (ch == '(') {
stack.offerFirst(i);
} else if (ch == ')') {
if (stack.isEmpty()) {
indexesToRemove.add(i);
} else {
stack.pollFirst();
}
}
}
while (!stack.isEmpty()) {
indexesToRemove.add(stack.pollFirst());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length; i++) {
if (!indexesToRemove.contains(i)) {
sb.append(input[i]);
}
}
return sb.toString();
}
}