🙃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();
}
}
2 pass 不丢人,第一遍用来标记哪些需要移除,注意使用set
所谓的minimum就是把多出来的左括号或者右括号移除
Last updated