class Solution {
public String removeKdigits(String num, int k) {
Deque<Character> digits = new LinkedList<>();
for (int i = 0; i < num.length(); i++) {
Character digit = num.charAt(i);
while (!digits.isEmpty() && k > 0 && digits.peekLast() > digit) {
digits.pollLast();
k--;
}
digits.offerLast(digit);
}
for (int i = 0; i < k; i++) {
digits.pollLast();
}
StringBuilder ans = new StringBuilder();
boolean leadingZero = true;
while (!digits.isEmpty()) {
Character digit = digits.pollFirst();
if (leadingZero && digit == '0')
continue;
leadingZero = false;
ans.append(digit);
}
return ans.length() == 0 ? "0" : ans.toString();
}
}