3486. 最大的子串

Fifnmar

有点小坑,一开始我以为找到最大数字然后把尾部的 0 去掉就行了。这是错的,反例是 9899,正解为 99 而不是 9899。

经过思考,发现只要找到 [ptr, end) 最大就行,然后把尾部的 0 去掉。

#include <iostream>
#include <string>
using namespace std;
int main() {
    std::string s; std::cin >> s;
    auto crnt_max = &s[0];
    for (auto i = &s[1]; *i != '\0'; ++i)
        if (strcmp(crnt_max, i) < 0)
            crnt_max = i;
    auto ed = &*s.end();
    while (*(ed - 1) == '0')
        --ed;
    if (crnt_max == ed)
        std::cout << "0\n";
    else
        for (auto i = crnt_max; i != ed; ++i)
            cout << *i;
}
你当前正在回复 博客/题目
存在问题!