-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathRemoveKDigits.java
More file actions
33 lines (31 loc) · 972 Bytes
/
RemoveKDigits.java
File metadata and controls
33 lines (31 loc) · 972 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.dbc;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;
public class RemoveKDigits {
public String removeKdigits(String num, int k) {
Deque<Character> stack = new ArrayDeque<>();
for (int i = 0; i < num.length(); i++) {
while (!stack.isEmpty() && k > 0 && (stack.peekLast() - '0') > (num.charAt(i) - '0')) {
stack.pollLast();
k--;
}
stack.addLast(num.charAt(i));
}
while (k > 0) {
stack.pollLast();
k--;
}
StringBuilder ret = new StringBuilder();
boolean leadingZero = true;
while (!stack.isEmpty()) {
char digit = stack.pollFirst();
if (leadingZero && digit == '0') {
continue;
}
leadingZero = false;
ret.append(digit);
}
return ret.length() == 0 ? "0" : ret.toString();
}
}