P1106 删数问题题解

题目传递门

总结:
1、贪心策略:找出最前面的(k)个高峰,发现一个干掉一个,如果没有那么多高峰,其余的就可最后一位删除。

2、字符串删除操作。

3、去除前导零。

#include <bits/stdc++.h>

using namespace std;
//共删除k个数字
int k;
//输入的字符串
string s;

int main() {
    //输入
    cin >> s >> k;
    //共删除k个数字
    while (k--) {
        //找高峰期,每次都需要从头开始找
        int i = 0;
        for (; s[i] <= s[i + 1]; i++);
        //删除函数,就是从第i个位置连续删1个。
        //如果一个也没有找到,说明没有峰值出现,那么它默认会干掉最后一个~
        s.erase(i, 1);
    }
    //处理前导零
    while (s[0] == '0' && s.size() > 1) s.erase(0, 1);
    //输出大吉
    cout << s << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/littlehb/p/15035210.html