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.

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

    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 题目汇总

  • 相关阅读:
    WinService12r2系统加固-3389端口与端口安全
    WinService12r2系统加固-账户管理与服务安全
    渗透测试常用工具-stunnel内网穿透
    渗透测试常用工具-ptunnel内网穿透
    报错注入函数
    常见绕过disable_function(抄录)linux系统。windows系统大概只有com组件
    nmap(抄录)
    php回调木马
    NoSql注入小测试。
    日志:记一次网页篡改(从开始到质保)一个渗透工作者的工作之路
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9552042.html
Copyright © 2011-2022 走看看