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.
题目含义:按字母出现次数的降序重排字符串
1 public String frequencySort(String s) { 2 Map<Character, Integer> map = new HashMap<>(); 3 for (int i = 0; i < s.length(); i++) { 4 map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1); 5 } 6 PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>( 7 new Comparator<Map.Entry<Character, Integer>>() { 8 @Override 9 public int compare(Map.Entry<Character, Integer> a, Map.Entry<Character, Integer> b) { 10 return b.getValue() - a.getValue(); 11 } 12 } 13 ); 14 pq.addAll(map.entrySet()); 15 StringBuilder sb = new StringBuilder(); 16 while (!pq.isEmpty()) { 17 Map.Entry<Character, Integer> e = pq.poll(); 18 for (int i = 0; i < e.getValue(); i++) { 19 sb.append(e.getKey()); 20 } 21 } 22 return sb.toString(); 23 }