#include <iostream>
#include <set>
#include <string>
#define int long long
using namespace std;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    string s;
    cin >> s;
    int num[10][2] = {0};
    int j = 1;
    for (int i = 0; i < s.size(); i++)
    {
        num[s[i] - '0'][0]++;
        num[s[i] - '0'][1] = j;
        j++;
    }
    for (int i = j - 1; i > 0; i--)
    {
        for (int k = 0; k < 10; k++)
        {
            if (num[k][1] == i)
                cout << k;
        }
    }
    cout << endl;

    return 0;
}
// 64 位输出请用 printf("%lld")

这题本来想用set的,但是想起来set里面的数会自动排序,所以只能动脑子了。我们可以开一个二维数组,从数字0到9,把每次出现的数标记,并用最后一次的下标覆盖之前的下标。最后输出即可,数据量较小,所以没有优化。链接在此,牛币到账。#牛客春招刷题训练营#