• 查找表的算法//根据字符出现频率排序


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

    示例 1:

    输入:
    "tree"
    
    输出:
    "eert"
    
    解释:
    'e'出现两次,'r'和't'都只出现一次。
    因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
    

    示例 2:

    输入:
    "cccaaa"
    
    输出:
    "cccaaa"
    
    解释:
    'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
    注意"cacaca"是不正确的,因为相同的字母必须放在一起。
    

    示例 3:

    输入:
    "Aabb"
    
    输出:
    "bbAa"
    
    解释:
    此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
    注意'A'和'a'被认为是两种不同的字符。
    class Solution {
    public:
        string frequencySort(string s) {
            string res="";
            priority_queue<pair<int,char>> q;
            unordered_map<char,int> m;
            for(char c:s) ++m[c];
            for(auto a:m) q.push({a.second,a.first});
            while(!q.empty()){
                auto t = q.top();
                q.pop();
                res.append(t.first,t.second);
            }
            return res;
        }
    };
    class Solution {
    public:
        string frequencySort(string s) {
            unordered_map<char,int> m;
            for(char c:s) ++m[c];
            sort(s.begin(),s.end(),[&](char &a,char &b){
                return m[a]>m[b]||(m[a]==m[b]&&a<b);
            });
            return s;
        }
    };
    class Solution {
    public:
        string frequencySort(string s) {
            string res = "";
            vector<string> v(s.size()+1,"");
            unordered_map<char,int> m;
            for(char c:s) ++m[c];
            for(auto &a:m){
                v[a.second].append(a.second,a.first);
            }
            for(int i=s.size();i>0;i--){
                if(!v[i].empty()){
                    res.append(v[i]);
                }
            }
            return res;
        }
    };
  • 相关阅读:
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
    695. Max Area of Island
    2015 Benelux Algorithm Programming Contest E-Excellent Engineers
    URAL
    Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation
    Codeforces Round #144 (Div. 2) D table
    Codeforces Round #429 (Div. 2)
    Codeforces 610D Vika and Segments
    Codeforces 757D
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602392.html
Copyright © 2020-2023  润新知