451. 根据字符出现频率排序
题目解题思路代码
题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
解题思路
这个问题也是一个TOPK问题,只不过变成了统计char的个数。
用哈希表存储每个字符的出现次数,再通过一个大顶堆(根据出现次数排序),不断取出堆顶元素,使用StringBuilder不断append即可。
代码
class Solution {
public String
frequencySort(String s
) {
if (s
== null
) {
return null
;
}
Map
<Character,Integer> map
=new HashMap<>();
for(char str
: s
.toCharArray()){
if (map
.containsKey(str
)){
map
.put(str
,map
.get(str
)+1);
}else {
map
.put(str
,1);
}
}
PriorityQueue
<Map
.Entry
<Character, Integer>> pq
=new PriorityQueue<>( (e1
, e2
) -> e2
.getValue() - e1
.getValue());
pq
.addAll(map
.entrySet());
StringBuilder SB
=new StringBuilder();
while (!pq
.isEmpty()){
Map
.Entry
<Character,Integer> entry
=pq
.poll();
for (int i
=0;i
<entry
.getValue();i
++){
SB
.append(entry
.getKey());
}
}
return SB
.toString();
}
}