import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @param k int整型
* @return string字符串
*/
public String removeKnums (String num, int k) {
if(k == num.length()){
return "0";
}
int total = num.length() - k;
Deque<Character> dq = new ArrayDeque<>();
for (int i = 0; i < num.length(); i++) {
while (!dq.isEmpty() && dq.peekLast() - num.charAt(i) > 0){//队列尾部元素大于当前遍历的字符,需要弹出
if(dq.size() - 1 + num.length() - i >= total){//确保弹出后后续元素加入队列能达到目标长度
dq.removeLast();
}else {
break;
}
}
if(dq.size() < total){//队列元素少于目标长度时才能添加元素
dq.addLast(num.charAt(i));
}
}
StringBuffer sbr = new StringBuffer();
boolean flag = false;
while (!dq.isEmpty()){
if(dq.peekFirst() != '0'){//去掉前导0的标志
flag = true;
}
if(flag){
sbr.append(dq.removeFirst());
}else {
dq.removeFirst();
}
}
String res = new String(sbr);
return res.equals("") ? "0" : res;
}
}
单调栈,注意压栈和弹栈条件即可



京公网安备 11010502036488号