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 Mapmap = 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 > pq = new PriorityQueue<>( 7 new Comparator >() { 8 @Override 9 public int compare(Map.Entry a, Map.Entry 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 e = pq.poll();18 for (int i = 0; i < e.getValue(); i++) {19 sb.append(e.getKey());20 }21 }22 return sb.toString(); 23 }