题目连接
单调栈的典型题
当K等于字符串长度时,是可以直接返回0的
然后就是移除数字,这边是维护一个单调递增栈,当前元素小于栈顶元素时,弹出栈顶元素,相当于删除,这里要用while,因为可能下一个栈顶元素仍然大于当前元素,删除完元素之后才能进行添加当前元素的操作。
有可能进行完上述操作后,还没有删除够K个元素,因为是单调递增栈,所以直接从后面开始删除,也就是弹出栈顶元素,直到K等于0。
然后就是把还留在栈中的元素拼倒序接成字符串。
最后还需要的一步处理是删除头部的'0'。
代码如下:
class Solution {
public String removeKdigits(String num, int k) {
if (k == num.length()) {
return "0";
}
Stack stack = new Stack<>();
for (int i = 0; i < num.length(); i++) {
while (!stack.isEmpty() && num.charAt(i) < stack.peek() && k > 0) {
stack.pop();
k--;
}
stack.push(num.charAt(i));
}
while (k != 0) {
k--;
stack.pop();
}
String res = "";
while (!stack.isEmpty()) {
res = stack.pop() + res;
}
while (res.length() > 1 && res.charAt(0) == '0') {
res = res.substring(1);
}
return res;
}
}



