zoukankan      html  css  js  c++  java
  • [leetcode-451-Sort Characters By Frequency]

    Given a string, sort it in decreasing order based on the frequency of characters.

    Example 1:

    Input:
    "tree"
    
    Output:
    "eert"
    
    Explanation:
    'e' appears twice while 'r' and 't' both appear once.
    So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
    

    Example 2:

    Input:
    "cccaaa"
    
    Output:
    "cccaaa"
    
    Explanation:
    Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
    Note that "cacaca" is incorrect, as the same characters must be together.
    

    Example 3:

    Input:
    "Aabb"
    
    Output:
    "bbAa"
    
    Explanation:
    "bbaA" is also a valid answer, but "Aabb" is incorrect.
    Note that 'A' and 'a' are treated as two different characters.
    

     思路:

    统计每一个字符出现频率,依次找出最大频率的字符等等。。

    string frequencySort(string str)
         {
             vector<int>mp(256,0);
             for (auto c:str)
             {
                 mp[c]++;
             }
             string s="";
             int most = 0;
             int index = 0;
             for (int i = 0; i < 256;i++)
             {            for (int j = 0; j < 256;j++)
                 {
                     if (mp[j] == 0)continue;
                     if (most < mp[j])
                     {
                         most = mp[j];
                         index = j;
                     }
                 }
                 s.append(most, char(index));            
                 mp[index] = 0;
                 most = 0;
             }
             return s;
         }

     还有一种就是利用桶排序的思路,一个字符出现次数最多也就字符串长度次。

    将出现n次的字符都放在标号为n的bucket里,然后从后往前遍历即可。

     string frequencySort(string s) {
            unordered_map<char,int> freq;
            vector<string> bucket(s.size()+1, "");
            string res;
            
            //count frequency of each character
            for(char c:s) freq[c]++;
            //put character into frequency bucket
            for(auto& it:freq) {
                int n = it.second;
                char c = it.first;
                bucket[n].append(n, c);
            }
            //form descending sorted string
            for(int i=s.size(); i>0; i--) {
                if(!bucket[i].empty())
                    res.append(bucket[i]);
            }
            return res;
        }

    参考:

    https://discuss.leetcode.com/topic/66045/c-o-n-solution-without-sort

     
  • 相关阅读:
    计算两个经纬度之间的距离,单位米
    PHP获取汉字首字母函数
    tp3.2 上传文件及下载文件
    最少知识原则
    单一职责原则
    接口和面向接口编程
    开放-封闭原则
    设计原则
    websrom编译器
    头条笔试题2018后端第二批-用户喜好
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7128430.html
Copyright © 2011-2022 走看看