我是靠谱客的博主 幸福白羊,这篇文章主要介绍LeetCode - 451. Sort Characters By Frequency(按照字符出现次数排序(简单题)),现在分享给大家,希望可以做个参考。

LeetCode - 451. Sort Characters By Frequency(按照字符出现次数排序(简单题))

题目链接

题目

在这里插入图片描述

解析

很简单的题目,直接按照出现次数排序即可,这里只是为了熟练Java8的写法以及代码的优化。上面代码是自己写的(比较冗余),下面的是参考别人的。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Solution { private class Pair implements Comparable<Pair>{ public char c; public int count; public Pair(char c, int count){ this.c = c; this.count = count; } @Override public int compareTo(Pair o) { return -(count - o.count); } } public String frequencySort(String s) { List<Pair>pairs = new ArrayList<>(); HashMap<Character, Integer>map = new HashMap<>(); for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(map.containsKey(c)){ map.put(c, map.get(c) + 1); }else { map.put(c, 1); } } for(Map.Entry<Character, Integer>entry : map.entrySet()){ pairs.add(new Pair(entry.getKey(), entry.getValue())); } Collections.sort(pairs); StringBuilder sb = new StringBuilder(); for(Pair pair : pairs){ for(int i = 0; i < pair.count; i++) sb.append(pair.c); } return sb.toString(); } }

这个是简化后的代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution{ public String frequencySort(String s) { HashMap<Character, Integer>map = new HashMap<>(); // < char, count> for(char c : s.toCharArray()) map.put(c, 1 + map.getOrDefault( c, 0 ) ); List<Character> list = new ArrayList( map.keySet() ); list.sort( (c1, c2) -> map.get(c2) - map.get(c1)); StringBuilder sb = new StringBuilder(); for(char c : list) for(int i = 0; i < map.get(c); i++) sb.append(c); return sb.toString(); } }

最后

以上就是幸福白羊最近收集整理的关于LeetCode - 451. Sort Characters By Frequency(按照字符出现次数排序(简单题))的全部内容,更多相关LeetCode内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部