• LeetCode 451. Sort Characters By Frequency


    原题链接在这里:https://leetcode.com/problems/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.

    题解:

    类似Top K Frequent Elements. 利用Bucket Sort 按照频率把s的char放进bucket里, 再按照频率从大到小,重复频率次append到res中.

    Time Complexity: O(n), n = s.length(). Space: O(n).

    AC Java:

     1 public class Solution {
     2     public String frequencySort(String s) {
     3         if(s == null || s.length() == 0){
     4             return s;
     5         }
     6         
     7         HashMap<Character, Integer> freqMap = new HashMap<Character, Integer>();
     8         for(char c : s.toCharArray()){
     9             freqMap.put(c, freqMap.getOrDefault(c, 0)+1);
    10         }
    11         
    12         StringBuilder [] bucket = new StringBuilder[s.length()+1];
    13         for(char c : freqMap.keySet()){
    14             int freq = freqMap.get(c);
    15             if(bucket[freq] == null){
    16                 bucket[freq] = new StringBuilder();
    17             }
    18             for(int i = 0; i<freq; i++){
    19                 bucket[freq].append(c);
    20             }
    21         }
    22         
    23         StringBuilder res = new StringBuilder();
    24         for(int i = bucket.length-1; i>=0; i--){
    25             if(bucket[i] != null){
    26                 res.append(bucket[i]);
    27             }
    28         }
    29         return res.toString();
    30     }
    31 }

    类似Top K Frequent WordsFirst Unique Character in a String.

  • 相关阅读:
    AC自动机讲解超详细
    区间树Splay——[NOI2005]维护数列
    区间树Splay——[NOI2005]维护数列
    Trie学习总结
    微信小程序刮刮乐
    微信小程序获得高度
    微信小程序多video播放暂停问题
    vue中的问题思考
    vue的开发技巧
    微信小程序消息推送,前端操作
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/6362027.html
Copyright © 2020-2023  润新知