总结:和单调队列一样,遇到一个数满足弹栈,要弹出前面所有满足条件的元素。
class Solution {
public:
string removeKdigits(string num, int k) {
//单调递增栈
vector<char> stk;
string res;
for(auto &dig: num){
while(stk.size() !=0 && k && dig < stk.back()){ //弹栈用while,多弹满足的都弹直到单调增,后面的元素控制前面的元素。
stk.pop_back(); //如果当前的比前面的小,前面的就不要了
k--;
}
stk.push_back(dig);
}
for (; k > 0; --k) {
stk.pop_back();
}
for(auto &dig:stk){
if(res.size() == 0 && dig == '0'){
continue;
}
res += dig;
}
return res == "" ? "0" : res;
}
};
网友评论