class Solution {
public:
string removeKdigits(string num, int k) {
stack<char> s;
if(k>=num.size())
return "0";
for(int i=0;i<num.size();i++){
while(k>0 && !s.empty() && s.top()>num[i] ){
s.pop();
k--;
}
if(num[i]== '0' && s.empty())
continue;
s.push(num[i]);
}
while(k>0){
s.pop();
k--;
}
string res;
while(!s.empty()){
res.insert(res.begin(),s.top());
s.pop();
}
return res.size()==0 ? "0" : res;
}
};
思路:其基本思想是利用栈尽量维持一个递增的序列,也就是说将字符串中字符依次入栈,如果当前字符串比栈顶元素小,并且还可以继续删除元素,那么就将栈顶元素删掉,这样可以保证将当前元素加进去一定可以得到一个较小的序列.也可以算是一个贪心思想.最后我们只取前len-k个元素构成一个序列即可,如果这样得到的是一个空串那就手动返回0.还有一个需要注意的是字符串首字符不为0
402. Remove K Digits
最新推荐文章于 2020-11-15 15:29:57 发布