原题链接在这里:
题目:
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.
题解:
类似. 利用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 HashMapfreqMap = new HashMap (); 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 =0; i--){25 if(bucket[i] != null){26 res.append(bucket[i]);27 }28 }29 return res.toString();30 }31 }