解法一
用栈来存储左括号,遇到左括号就入栈,遇到右括号就出栈。空栈直接遇到右括号说明不合法,删除。全部遍历完以后栈中剩余的左括号都是非法的,也要删除。
import java.util.Deque;
import java.util.LinkedList;
class Solution {
public String minRemoveToMakeValid(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
Deque<Integer> stack = new LinkedList<Integer>();
int i = 0;
while (i < stringBuilder.length()) {
if ((stack.size() == 0) && (stringBuilder.charAt(i) == ')')) {
stringBuilder.deleteCharAt(i);
} else if (stringBuilder.charAt(i) == '(') {
stack.push(i);
++i;
} else if (stringBuilder.charAt(i) == ')') {
stack.poll();
++i;
} else {
++i;
}
}
while (!stack.isEmpty()) {
stringBuilder.deleteCharAt(stack.poll());
}
return stringBuilder.toString();
}
}