import java.util.*;

/**
 * NC219 移掉 K 位数字
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 单调栈(单调增)
     *
     * @param num string字符串 
     * @param k int整型 
     * @return string字符串
     */
    public String removeKnums (String num, int k) {
        if(k >= num.length()){
            return "0";
        }

        // 单调栈(单调增)
        Stack<Character> stack = new Stack<>();
        for(char digit: num.toCharArray()){
            while(!stack.isEmpty() && digit<stack.peek() && k>0){
                stack.pop();
                k--;
            }
            stack.push(digit);
        }

        // 移除剩余次数
        while(k-- > 0){
            if(!stack.isEmpty()){
                stack.pop();
            }
        }

        // 生成结果
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()){
            sb.insert(0, stack.pop());
        }

        // 去掉前导0
        String result = sb.toString();
        if(result.startsWith("0")){
            int index;
            for(index=0; index<result.length(); index++){
                if(result.charAt(index) != '0'){
                    break;
                }
            }
            if(index < result.length()){
                result = result.substring(index);
            }else{
                result = "0";
            }
        }

        return result;
    }
}