451. Sort Characters By Frequency

先统计次数,再按次数构造新的string。思路没什么难,写起来还有点麻烦。用了priorityqueue。。

  class Wrapper {public char c;public int freq;public Wrapper(char c, int freq) {this.c = c;this.freq = freq;}}public String frequencySort(String s) {if (s==null || s.length() == 0) return "";Map<Character, Integer> map = new HashMap<>();Set<Character> set = new HashSet<>();for (int i = 0; i < s.length(); i++) {int count = map.getOrDefault(s.charAt(i), 0);map.put(s.charAt(i), ++count);set.add(s.charAt(i));}PriorityQueue<Wrapper> pq = new PriorityQueue<>(new Comparator<Wrapper>() {@Overridepublic int compare(Wrapper o1, Wrapper o2) {return o1.freq - o2.freq;}});for (char c : set) {pq.offer(new Wrapper(c, map.get(c)));}StringBuilder sb = new StringBuilder();while (!pq.isEmpty()) {Wrapper w = pq.poll();for (int i = 0; i < w.freq; i++) {sb.insert(0, w.c);}}return sb.toString();}
复制代码

因为用了PriorityQueue所以复杂度是O(nlogn)。 看了别人的答案,有个是O(n)的,用了数组的index表示出现的次数。而且,我上面用了hashset,因为我不太会hashmap的遍历,下面的代码也展示了hashmap的遍历方法, for(char c : map.keySet()):

public String frequencySort(String s) {if (s == null) {return null;}Map<Character, Integer> map = new HashMap();char[] charArray = s.toCharArray();int max = 0;for (Character c : charArray) {if (!map.containsKey(c)) {map.put(c, 0);}map.put(c, map.get(c) + 1);max = Math.max(max, map.get(c));}List<Character>[] array = buildArray(map, max);return buildString(array);
}private List<Character>[] buildArray(Map<Character, Integer> map, int maxCount) {List<Character>[] array = new List[maxCount + 1];for (Character c : map.keySet()) {int count = map.get(c);if (array[count] == null) {array[count] = new ArrayList();}array[count].add(c);}return array;
}private String buildString(List<Character>[] array) {StringBuilder sb = new StringBuilder();for (int i = array.length - 1; i > 0; i--) {List<Character> list = array[i];if (list != null) {for (Character c : list) {for (int j = 0; j < i; j++) {sb.append(c);}}}}return sb.toString();
}
复制代码

转载于:https://juejin.im/post/5a31340251882531e944cfab

451 Sort Characters By Frequency相关推荐

  1. leetcode: 451. Sort Characters By Frequency

    451. Sort Characters By Frequency Given a string, sort it in decreasing order based on the frequency ...

  2. LeetCode 451. Sort Characters By Frequency

    用hash表记录每个字符的个数,开始我是新建了一个vector<pair<int,char>>然后依据个数排序. 后来发现可以直接对string排序. 其中运用了lambda表 ...

  3. 堆排序——LeetCode451. Sort Characters By Frequency

    堆排序--LeetCode451. Sort Characters By Frequency 题目 Given a string, sort it in decreasing order based ...

  4. LeetCode 451. 根据字符出现频率排序(Sort Characters By Frequency)

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree"输出: "eert"解释: 'e'出现两次,'r'和't ...

  5. LeetCode Sort Characters By Frequency

    题意:给出一个字符串s,按字符出现频率排序 代码如下: class Solution(object):def frequencySort(self, s):""":typ ...

  6. 查找算法常见的五大面试知识点与两类实战!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:周郴莲,东北石油大学,Datawhale优秀学习者 前言 查找(S ...

  7. 继续过中等难度.0309

      .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Mediu ...

  8. 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...

  9. LeetCode github集合,附CMU大神整理笔记

    Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...

最新文章

  1. SAP PP为工单创建好HU之后,如何查询HU号码?
  2. 第一个项目的需求分析
  3. 希尔排序Linux下C实现
  4. 重庆大学计算机学院就读,唐远炎(计算机学院)老师 - 重庆大学 - 院校大全
  5. python通过下载链接下载_Python根据URL地址下载文件——wget
  6. outlook advanced find 快捷键不起作用
  7. 爬虫实战学习笔记_7 【实战】模拟下载页面视频(模板)
  8. 让开发人员变平庸的八个习惯,看看你中了几条
  9. MySQL多表数据记录查询详解
  10. Django2.0中URL的路由机制
  11. linux下类似Bus Hound的工具
  12. mybatis mysql crud_mybatis实现CRUD操作(mysql数据库)(二)
  13. 基于扩频信号的水声信道数据传输系统仿真,研究满足了WSSUS假设的瑞利信道模型,采用相干BPSK调制,联合多普勒Rake接收机
  14. MATLAB中cfl,教程合集 | MATLAB绘图基本操作与属性
  15. 1.JsDroid命令行调试命令
  16. 中国海洋大学计算机系实习报告,中国海洋大学海洋学实习报告.doc
  17. Javascript 设计模式 -- Revealing Module(揭示模块)模式
  18. Pyqt walk 在Windows查找文件
  19. 【已解决】vagrant up下载box速度太慢的解决方法
  20. 最全的软件测试面试题

热门文章

  1. 手把手教你玩转SOCKET模型之重叠I/O篇(下)
  2. Visual C++设计UDP协议通讯示例
  3. java 打印box文件
  4. nefu 753 n!末尾有多少个0
  5. How Browser Works
  6. 产品工作中保持饥饿感,保持拒绝90%以上的伪需求你就不会错过下一个微信
  7. 产品入门首月成长报告 | PMcaff-干货
  8. 如何判断网站是否启用HTTP2
  9. JavaScript之手写Promise
  10. springboot项目打包成war并在tomcat上运行的步骤