天天看點

LeetCode-Day110(C++) 451. 根據字元出現頻率排序

  1. 根據字元出現頻率排序

    給定一個字元串,請将字元串裡的字元按照出現的頻率降序排列。

示例 1:

輸入:

“tree”

輸出:

“eert”

解釋:

'e’出現兩次,'r’和’t’都隻出現一次。

是以’e’必須出現在’r’和’t’之前。此外,"eetr"也是一個有效的答案。

示例 2:

輸入:

“cccaaa”

輸出:

“cccaaa”

解釋:

'c’和’a’都出現三次。此外,"aaaccc"也是有效的答案。

注意"cacaca"是不正确的,因為相同的字母必須放在一起。

示例 3:

輸入:

“Aabb”

輸出:

“bbAa”

解釋:

此外,"bbaA"也是一個有效的答案,但"Aabb"是不正确的。

注意’A’和’a’被認為是兩種不同的字元。

class Solution {
public:
    string frequencySort(string s) {
        unordered_map<char, int> mp;
        int length = s.length();
        for (auto &ch : s) {
            mp[ch]++;
        }
        vector<pair<char, int>> vec;
        for (auto &it : mp) {
            vec.emplace_back(it);
        }
        sort(vec.begin(), vec.end(), [](const pair<char, int> &a, const pair<char, int> &b) {
            return a.second > b.second;
        });
        string ret;
        for (auto &[ch, num] : vec) {
            for (int i = 0; i < num; i++) {
                ret.push_back(ch);
            }
        }
        return ret;
    }
};