LeetCode451. 根据字符出现频率排序(频率排序:map+堆)

该博客探讨了如何利用C++解决频率排序的问题,主要介绍了两种方法:桶排序的套娃和map+堆。作者推荐使用map+堆的方法,因为它更加稳定且通用。在实现中,通过创建一个unordered_map来存储字符及其频率,然后利用优先队列根据频率进行排序。最终将排序后的字符重新组合成字符串返回。
摘要由CSDN通过智能技术生成

此题与LeetCode347是基本一样的
对于这种频率统计并排序问题,做法一:桶排序的套娃
做法二:map+堆

做法二更不容易错一些,而且非常通用,故记录写法。

map的建立为 <字母,对应的频率>, c++优先队列自动安装key值进行调整,所以push的时候要反过来。

写法参考如下:

class Solution {
public:
    string frequencySort(string s) {
        unordered_map<char,int> fre;
        for(char ch:s)
        {
            fre[ch]++;
        }

        priority_queue<pair<int,char>> q;

        for(auto f:fre)
        {
            q.push({f.second,f.first});
        }

        string res="";

        while(!q.empty())
        {
            for(int i=0;i<q.top().first;i++)
            {
                res+=q.top().second;
            }
            q.pop();
        }
        return res;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值