博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
451 Sort Characters By Frequency
阅读量:6671 次
发布时间:2019-06-25

本文共 2259 字,大约阅读时间需要 7 分钟。

先统计次数,再按次数构造新的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
map = new HashMap<>(); Set
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
pq = new PriorityQueue<>(new Comparator
() { @Override public 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
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
[] array = buildArray(map, max); return buildString(array);}private List
[] buildArray(Map
map, int maxCount) { List
[] 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
[] array) { StringBuilder sb = new StringBuilder(); for (int i = array.length - 1; i > 0; i--) { List
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/5a3132f7f265da432a7b9659

你可能感兴趣的文章
他俩窃取了34个共享单车账户,两天挣了2万多
查看>>
Half-Life's In-Game Visibility Determination
查看>>
Vitalik Buterin:我们正处于 ICO 泡沫,很多人会亏钱
查看>>
放眼业界看得见的未来 十谈大数据时代
查看>>
WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化
查看>>
零售ERP系统方案选型―IT只是一个工具
查看>>
GraphQL提供数据接口新思路之数据聚合解决方案
查看>>
CentOS7 安装Firefly及测试
查看>>
术有专攻 | 如何在公私混用的设备上保障企业信息安全
查看>>
安全自动化在于信任,而非技术
查看>>
揭密巴西Banrisul银行网站遭遇5小时劫持的原因
查看>>
安装Linux流量监控工具 - iftop
查看>>
如何令移动下载飞起来 结合LTE与Wi-Fi
查看>>
亚信安全与成都市政府达成战略合作
查看>>
如果你喜欢上了一个程序员小伙
查看>>
大数据时代:统计学是数据分析的灵魂
查看>>
为什么我的物联网创业失败?看看这五个原因
查看>>
Intel融合Altera做大做强FPGA
查看>>
英特尔X520万兆网卡构建高效云中心
查看>>
AI“入侵”数据中心
查看>>