🙃1249 minimum remove to make valid parentheses

https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/

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();
    }
}
  1. 2 pass 不丢人,第一遍用来标记哪些需要移除,注意使用set

  2. 所谓的minimum就是把多出来的左括号或者右括号移除

Last updated