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.
题目含义:按字母出现次数的降序重排字符串

 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     }

 

posted @ 2017-10-23 21:51  daniel456  阅读(115)  评论(0编辑  收藏  举报