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; } }
单调栈,注意压栈和弹栈条件即可