根据字符出现频率排序

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

示例 1:

输入:

"tree"

输出:

"eert"

解释:

'e'出现两次,'r'和't'都只出现一次。

因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

示例 2:

输入:

"cccaaa"

输出:

"cccaaa"

解释:

'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。

注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例 3:

输入:

"Aabb"

输出:

"bbAa"

解释:

此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。

注意'A'和'a'被认为是两种不同的字符。

利用PriorityQueue去做

 public class Solution {
public String frequencySort(String s) {
Map<Character,Integer> map = new HashMap<>();
char[] letters = s.toCharArray();
for(char l:letters) {
if(map.containsKey(l)) {map.put(l, map.get(l)+1);}
else {map.put(l, 1);}
}
PriorityQueue<Map.Entry<Character,Integer>> pq = new PriorityQueue<>(
new Comparator<Map.Entry<Character,Integer>>(){
@Override
public int compare(Map.Entry<Character,Integer> a,Map.Entry<Character,Integer> b) {
return b.getValue()-a.getValue();
}
}
);
pq.addAll(map.entrySet());
StringBuilder sb = new StringBuilder();
while(!pq.isEmpty()) {
Map.Entry<Character, Integer> e = pq.poll();
for(int i=0;i<e.getValue();i++) sb.append(e.getKey());
}
return sb.toString();
}
}

最新文章

  1. Android 急速发布项目到 JitPack
  2. TLogger一个D7可用的轻量级日志
  3. XidianOJ 1149 卡尔的技能 II
  4. sql 修改字段长度以及其他属性
  5. poj 1733(带权并查集+离散化)
  6. RecyclerView(5)官方教程带简单示例
  7. 【转】Android开源项目发现---ListView篇(持续更新)
  8. codeforces 8C. Looking for Order 状压dp
  9. Csharp多态的实现概述
  10. AngularJS的初始化
  11. ios电话监听状态
  12. ActiveMQ消息队列用法
  13. js if for 详解 获取元素方式 及一些js 基础知识
  14. UE4联机多人游戏基本设置
  15. citrix外企,鸡鸣寺,玄武湖环跑,七牛云笔试
  16. Qt5模块简介
  17. 用java实现操作两个数据库的数据
  18. 第九周学习笔记-ADO.Net中DataSet的应用
  19. Mysql JSON字段提取某一个属性值的函数
  20. 图论分支-Tarjan初步-边双联通分量

热门文章

  1. pt-table-checksum和pt-table-sync
  2. python 之 re 模块
  3. selenium+python之自动换测试用例执行
  4. 似水流年 ? Chrome调试大全
  5. NGUI类之间的关系架构
  6. 2018.5.5 phpStorm破解2017.3版本方法
  7. python_81_标准库_时间模块
  8. 修改Windows默认调试器
  9. IDEA项目显示树形结构
  10. oracle系統表、數據字典介紹與日常問題診斷