LeetCode : Sort Characters By Frequency

来源:互联网 发布:淘宝网卖安眠药叫什么 编辑:程序博客网 时间:2024/06/08 06:55

Solution 1 - O(nlogn)

先把字符串排序,再统计次数。

string frequencySort(string s){    if (s.length() < 3)        return s;       sort(s.begin(), s.end()); // 把s中的字符排序,相同的字符放在一起    vector<string> rec(s.length());    // 对s中的每个字符计数    int num = 1, begin = 0;    for (int i = 1; i <= s.size(); i++)    {        if (s[i] != s[i - 1])// 和前一个不同则将前一个字符保存,后面的重新开始计数        {            rec[num - 1] += s.substr(begin, num);             begin = i;            num = 1;            continue;        }        num++; // 和前一个字符相同则计数加1     }       rec[num - 1] += s.substr(begin, num);    string result = "";    for (int i = rec.size() - 1; i >= 0; i--)        result += rec[i];    return result;}

Solution 2 - O(n)

通过map来统计频率

string frequencySort(string s){    if (s.length() < 3)        return s;    // 用map统计频率 (字符做键)    unordered_map<char, int> rec;    for (int i = 0; i < s.size(); i++)        rec[s[i]] ++;    // 把map转移到vector中(频率做键)    vector<string> vRec(s.size());    for (auto it : rec)        vRec[it.second - 1].append(it.second, it.first);    // 按照频率依次加到结果中    string result = "";    for (int i = vRec.size() - 1; i >= 0; i--)        result += vRec[i];    cout << result << endl;    return result;}
0 0
原创粉丝点击