解法一
用栈来存储左括号,遇到左括号就入栈,遇到右括号就出栈。空栈直接遇到右括号说明不合法,删除。全部遍历完以后栈中剩余的左括号都是非法的,也要删除。
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();}}
