【力扣 076】451. 根據字元出現頻率排序
阿新 • • 發佈:2022-05-26
451. 根據字元出現頻率排序
給定一個字串 s ,根據字元出現的 頻率 對其進行 降序排序 。一個字元出現的 頻率 是它出現在字串中的次數。
返回 已排序的字串 。如果有多個答案,返回其中任何一個。
示例 1:
輸入: s = "tree"
輸出: "eert"
解釋: 'e'出現兩次,'r'和't'都只出現一次。
因此'e'必須出現在'r'和't'之前。此外,"eetr"也是一個有效的答案。
示例 2:
輸入: s = "cccaaa"
輸出: "cccaaa"
解釋: 'c'和'a'都出現三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正確的,因為相同的字母必須放在一起。
示例 3:
輸入: s = "Aabb"
輸出: "bbAa"
解釋: 此外,"bbaA"也是一個有效的答案,但"Aabb"是不正確的。
注意'A'和'a'被認為是兩種不同的字元。
提示:
1 <= s.length <= 5 * 105
s 由大小寫英文字母和數字組成
來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/sort-characters-by-frequency
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
程式碼實現:
方法一: 優先佇列
程式碼實現:
class Solution { public: string frequencySort(string s) { unordered_map<char, int> s_map; for (char c : s) s_map[c]++; auto cmp = [](pair<char, int> &lhs, pair<char, int> &rhs) { return lhs.second < rhs.second; }; priority_queue<pair<char, int>, vector<pair<char, int>>, decltype(cmp)> qu(cmp); for (auto &[key, val] : s_map) qu.emplace(key, val); string res; while (!qu.empty()) { for (int i = 0; i < qu.top().second; ++i) { res.push_back(qu.top().first); } qu.pop(); } return res; } };