题目
思路 单调栈
维护一个递增的栈,遍历字符串,如果k>0且栈不为空且栈顶元素大于当前元素,就把这个元素移出栈。由于可能移除的元素不够多,所以需要在存入结果时,只存栈里面n-k个。由于最后需要从栈底到栈顶获取栈里的元素,所以这题不用stack表示栈,用vector表示。
代码
class Solution {
public:
string removeKdigits(string num, int k) {
vector<char> s;
int remain=num.size()-k;
for(char c:num){
while(k>0 && s.size() && s.back()>c){
s.pop_back();
k--;
}
s.push_back(c);
}
string ans="";
for(int i=0;i<remain;i++){
if(ans.size() || s[i]!='0')
ans+=s[i];
}
return ans==""?"0":ans;
}
};