解法一

用栈来存储左括号,遇到左括号就入栈,遇到右括号就出栈。空栈直接遇到右括号说明不合法,删除。全部遍历完以后栈中剩余的左括号都是非法的,也要删除。

  1. import java.util.Deque;
  2. import java.util.LinkedList;
  3. class Solution {
  4. public String minRemoveToMakeValid(String s) {
  5. StringBuilder stringBuilder = new StringBuilder(s);
  6. Deque<Integer> stack = new LinkedList<Integer>();
  7. int i = 0;
  8. while (i < stringBuilder.length()) {
  9. if ((stack.size() == 0) && (stringBuilder.charAt(i) == ')')) {
  10. stringBuilder.deleteCharAt(i);
  11. } else if (stringBuilder.charAt(i) == '(') {
  12. stack.push(i);
  13. ++i;
  14. } else if (stringBuilder.charAt(i) == ')') {
  15. stack.poll();
  16. ++i;
  17. } else {
  18. ++i;
  19. }
  20. }
  21. while (!stack.isEmpty()) {
  22. stringBuilder.deleteCharAt(stack.poll());
  23. }
  24. return stringBuilder.toString();
  25. }
  26. }