LeetCode 451 根据字符出现频率排序

2019-10-31  本文已影响0人  萨缪

451. 根据字符出现频率排序

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

思路:先创建一个哈希表用来映射字符串中的单个字符的出现次数与该字符相对应,再创建一个multimap来把这个哈希表以表中每一对键值的出现次数为准,升序装入,最后在女遍历这个哈希表,因为题目要求即使是重复字符结果也要显示出来,所以就得每次遍历判断该字符的出现次数,然后使用一个while循环来输出重复字符。
堆这一块就暂时结束,基本的解题方法就是这几种

源代码如下:

class Solution {
public:
    string frequencySort(string s) {
        map<char, int> count;
        multimap<int, char> chmap;
        for (char ch : s) {
            count[ch]++;
        }
        for (auto f = count.begin(); f != count.end(); f++) {
            chmap.insert(make_pair(f->second, f->first));
        }
        string str;
        int idx = s.size()-1;
        for (auto it = chmap.begin(); it != chmap.end(); it++) {
            int fr = it->first;
            char x = it->second;
            while (fr-- > 0) {
            s[idx--] = x;
            }
        }
        return s;
    }
};
上一篇下一篇

猜你喜欢

热点阅读