Sort Characters By Frequency

题目来源
将字符串中字符按频率排序。搞了半天,sort不会用,lambda表达式不会用…

class Solution {
public:
    string frequencySort(string s) {
        int n = s.size();
        unordered_map<char, int> maps;
        for (int i=0; i<n; i++)
            maps[s[i]]++;
        sort(s.begin(), s.end(), [&](char a, char b) {
            return maps[a] > maps[b] || (maps[a] == maps[b] && a < b);
        });
        return s;
    }
};

又看了看别的大神们的做法,直接先哈希一遍,然后搞一个buckets,存储出现频次为i的字符,然后再从大到小相加,得到结果,厉害,只要O(n)复杂度,不需要sort,代码如下:

class Solution {
public:
    string frequencySort(string s) {
        int n = s.size();
        unordered_map<char, int> maps;
        for (int i=0; i<n; i++)
            maps[s[i]]++;
        sort(s.begin(), s.end(), [&](char a, char b) {
            return maps[a] > maps[b] || (maps[a] == maps[b] && a < b);
        });
        return s;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容