题解 | #字符串出现次数的TopK问题#

字符串出现次数的TopK问题

http://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee



public class Solution {
    /**
     * return topK string
     * @param strings string字符串一维数组 strings
     * @param k int整型 the k
     * @return string字符串二维数组
     */
    // 定义一个类来存放 字符串和它出现的次数
    class Node{
        String str;
        int count;
        public Node(String str, int count){
            this.str  = str;
            this.count = count;
        }
    }
    public String[][] topKstrings (String[] strings, int k) {
        // write code here
        // 使用map 统计 每个字符串出现的次数
        HashMap<String,Integer> map = new HashMap<>();
        for(int i = 0; i < strings.length; i++){
            if(map.containsKey(strings[i])){
                map.put(strings[i],map.get(strings[i]) + 1);
            }else{
                map.put(strings[i],1);
            }
        }
        // 定义一个List 用来存放 string 和次数, 然后对List 排序
        ArrayList<Node> list = new ArrayList<>();
        for(Map.Entry<String,Integer> entry : map.entrySet()){
            list.add(new Node(entry.getKey(),entry.getValue() ));
        }
        // 使用 Collection.sort 进行排序, 自定义排序
        Collections.sort(list,new Comparator<Node>(){
            // 重写compare
            public int compare(Node a,Node b){
                if(a.count != b.count){
                    return b.count - a.count;
                }else{
                    return a.str.compareTo(b.str); // 按字典顺序排序
                }
            }
        });
        // 选出list中前面k个转化为二维数组返回
        // 定义二维数组
        String[][] returnArray = new String[k][2];
        for(int i = 0; i < k; i++){
            returnArray[i][0] = list.get(i).str;
            returnArray[i][1] = String.valueOf(list.get(i).count);
        }
        return returnArray;
    }
}
全部评论

相关推荐

07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务