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.
思路:先用hashmap统计词频,然后用pq来建立string;
class Solution {
public class Node {
public char c;
public int fre;
public Node(char c, int fre) {
this.c = c;
this.fre = fre;
}
}
public String frequencySort(String s) {
HashMap<Character, Integer> hashmap = new HashMap<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
hashmap.put(c, hashmap.getOrDefault(c, 0) + 1);
}
PriorityQueue<Node> pq = new PriorityQueue<Node>((a, b) -> (b.fre - a.fre));
for(Character c: hashmap.keySet()) {
pq.offer(new Node(c, hashmap.get(c)));
}
StringBuilder sb = new StringBuilder();
while(!pq.isEmpty()) {
Node node = pq.poll();
int k = node.fre;
while(k > 0) {
sb.append(node.c);
k--;
}
}
return sb.toString();
}
}