思路:利用单调栈,每个数字都尝试入栈,但是如果栈顶比当前数字大,就需要弹出。
public static String removeKdigits(String num, int k){
Deque<Character> stack=new ArrayDeque<>(num.length());
for(char c:num.toCharArray()){
while(k>0&&!stack.isEmpty()&&stack.peek()>c){
stack.pop();
k--;
}
if(c!='0'||!stack.isEmpty()){
stack.push(c);
}
}
//如果还没删完k个,说明后面入栈的数越来越大,出栈可以去掉较大的数
while(k>0&&!stack.isEmpty()){
k--;
stack.pop();
}
StringBuilder res=new StringBuilder();
while(!stack.isEmpty()){
res.append(stack.pollLast());
}
return res.length()==0?"0":res.toString();
}