LeetCode - 451. Sort Characters By Frequency 按照字符出现次数排序 简单题
题目
解析
很简单的题目,直接按照出现次数排序即可,这里只是为了熟练 Java8
的写法以及代码的优化。上面代码是自己写的(比较冗余),下面的是参考别人的。
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();
}
}
这个是简化后的代码:
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();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Fedora22 安装 Chrome
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论