题目:
分析:题目本质上还是排序,同类题目可看这里 ,排好序后取出来构建字符串即可。
这种值:频率 或 值:其它内容带有关联性的可以采用优先队列,视情况是否需要自定义comparator
代码:
class Solution {
Map<Character,Integer> count = new HashMap<>();
public String frequencySort(String s) {
for(int i = 0; i < s.length(); i++){
count.put(s.charAt(i),count.getOrDefault(s.charAt(i), 0)+1);
}
Queue<Character> countPQ = new PriorityQueue<>(new countPQComparator());
for(char ch : count.keySet()){
countPQ.offer(ch);
}
StringBuilder str = new StringBuilder();
while(!countPQ.isEmpty()){
char ch = countPQ.peek();
for(int j = 0; j < count.get(ch); j++){
str.append(ch);
}
countPQ.poll();
}
return str.toString();
}
class countPQComparator implements Comparator<Character>{
public int compare(Character n1, Character n2){
if(count.get(n1) < count.get(n2)){
return 1;
}else if(count.get(n1) > count.get(n2)){
return -1;
}else {
return 0;
}
}
}
}