Stack
Java里尽量避免使用Stack class
Deque<Integer> stack = new ArrayDeque<Integer>();public String minRemoveToMakeValid(String s) {
int len = s.length();
Stack<Integer> pendingLeft = new Stack<>();
Set<Integer> unpairedright = new HashSet<>();
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
if (c == '(') {
pendingLeft.add(i);
} else if (c == ')') {
if (pendingLeft.isEmpty()) {
unpairedright.add(i);
} else {
pendingLeft.pop();
}
}
}
while (!pendingLeft.isEmpty()) {
unpairedright.add(pendingLeft.pop());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
if (unpairedright.contains(i)) continue;
sb.append(s.charAt(i));
}
return sb.toString();
}Last updated