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

发布于 2024-08-14 11:45:46 字数 2094 浏览 10 评论 0

题目

解析

很简单的题目,直接按照出现次数排序即可,这里只是为了熟练 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

幸福丶如此

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文