#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,把每次出现的数标记,并用最后一次的下标覆盖之前的下标。最后输出即可,数据量较小,所以没有优化。链接在此,牛币到账。#牛客春招刷题训练营#