根据字符出现频率排序
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
链接:https://leetcode.cn/problems/sort-characters-by-frequency
- HashMap 统计每个字符出现的频率
tips:采用 getOrDefault 计数。若 map 不存在此key 则计数为0,存在则在原来的计数中加1
charFreqMap.put(c, charFreqMap.getOrDefault(c, 0) + 1);
- 优先级队列将字符入队列,比较器为:字符出现的频率。构造大顶堆
- 出队列,获取字符出现的次数,拼接结果。
public String frequencySort(String s) {
Map<Character, Integer> charFreqMap = new HashMap<>();
//记录每个字符出现的频率
for (int i = 0; i < s.length(); i++) {
Character c = s.charAt(i);
charFreqMap.put(c, charFreqMap.getOrDefault(c, 0) + 1);
}
//定义比较器: 按字符频率大小进行比较
Comparator<Character> comparator = (o1, o2) -> charFreqMap.getOrDefault(o2, 0).compareTo(charFreqMap.getOrDefault(o1, 0));
PriorityQueue<Character> pq = new PriorityQueue<>(comparator);
for (Map.Entry<Character, Integer> entry : charFreqMap.entrySet()) {
//将字符按频率大小放入优先级队列
pq.add(entry.getKey());
}
StringBuilder sb = new StringBuilder();
while (!pq.isEmpty()) {
Character c = pq.poll();
Integer freq = charFreqMap.get(c);
for (int i = 0; i < freq; i++) {
//重复出现的次数
sb.append(c);
}
}
return sb.toString();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2015-07-10 Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包