• [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.

    给一个字符串按照字符出现的频率来排序。

    Java:

    public class Solution {
        public String frequencySort(String s) {
            HashMap<Character, Integer> charFreqMap = new HashMap<>();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                charFreqMap.put(c, charFreqMap.getOrDefault(c, 0) + 1);
            }
            ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(charFreqMap.entrySet());
            list.sort(new Comparator<Map.Entry<Character, Integer>>(){
                public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
            StringBuffer sb = new StringBuffer();
            for (Map.Entry<Character, Integer> e : list) {
                for (int i = 0; i < e.getValue(); i++) {
                    sb.append(e.getKey());
                }
            }
            return sb.toString();
        }
    } 

    Python:

    class Solution(object):
        def frequencySort(self, s):
            """
            :type s: str
            :rtype: str
            """
            return ''.join(c * t for c, t in collections.Counter(s).most_common()) 

    Python:

    class Solution(object):
        def frequencySort(self, s):
            """
            :type s: str
            :rtype: str
            """
            freq = collections.defaultdict(int)
            for c in s:
                freq[c] += 1
    
            counts = [""] * (len(s)+1)
            for c in freq:
                counts[freq[c]] += c
    
            result = ""
            for count in reversed(xrange(len(counts)-1)):
                for c in counts[count]:
                    result += c * count
    
            return result
    

    C++:

    class Solution {
    public:
        string frequencySort(string s) {
            unordered_map<char, int> freq;
            for (const auto& c : s) {
                ++freq[c];
            }
                
            vector<string> counts(s.size() + 1);
            for (const auto& kvp : freq) {
                counts[kvp.second].push_back(kvp.first);
            }
                
            string result;
            for (int count = counts.size() - 1; count >= 0; --count) {
                for (const auto& c : counts[count]) {
                    result += string(count, c);
                }
            }
            
            return result;
        }
    };
    

      

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    mybatis:SQL拦截器
    eclipse:插件安装总结
    eclpse:安装explorer或eExplorer插件
    Spring Tools4
    nginx+tomcat:动静分离+https
    Tomcat:3DES解密时中文乱码
    wireshark如何抓取localhost包
    nginx: 应用访问默认采用https
    windows :config windows update … 一直处于假死状态
    EHCache:Eelment刷新后,timeToLiveSeconds失效了?
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9552042.html
Copyright © 2020-2023  润新知