int maxBucket = 0; int mp[128]; // 字符和数量的映射表 memset(mp, 0, sizeof(int) * 128); for (char c : s) { mp[c]++; maxBucket = max(maxBucket, mp[c]); }
vector<vector<char>> bucket(maxBucket+1); for (int i = 0; i < 128; ++i) { if (mp[i] > 0) bucket[mp[i]].push_back((char)i); }
string ss; for (int i = maxBucket; i > 0; --i) { if (bucket[i].empty()) continue; for (char c : bucket[i]) { int cnt = i; while (cnt--) { ss += c; } } } return ss; } };