笔试面试题之wordcount(出自网易)

各大公司公开了的笔试面试题练习之网易游戏2016“运营开发工程师”在线测评题wordcount解答

全部代码下载:

Github链接:https://github.com/wpeace1212/Coder/tree/master/Code/netease

写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

##题目1.wordcount
时间限制: 2000ms
单点时限: 1000ms
内存限制: 256MB

描述

有一篇文章只包含英文单词,请按它们的出现次数排序,出现最多的先输出;如果出现次数相等的,按字符串ASCII排序升序输出。

输入

第一行会是行数N( 0 < N <= 500)。

之后N行中的每行会是一个或多个英文单词。

数据总大小不超过100K。

输出

输出:

<单词1><空格><次数1>

<单词2><空格><次数2>

样例输入
4

SQL DW

SQL AS DW

AB

SQL
样例输出
SQL 3

DW 2

AB 1

AS 1

2.我的理解:

  1. 单词计数

用map计数是比价简便也容易想到的不是难点

  1. 排序

关键是对建单词和值次数进行排序,需要想到关键性的Entry获得键值对,然后进行排序就简单了。

3.我的代码:


package com.netease.yunyin;



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;



public class WordCount {

      public static void main(String[] args) {

        //获得输入

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        //将单词和次数存成键值对

        Map<String, Integer>words=new HashMap<>();

        //行数

        int n=0;



        try {

            //行数获得

            n= Integer.parseInt(br.readLine());

        } catch (NumberFormatException e1) {

            e1.printStackTrace();

        } catch (IOException e1) {

            e1.printStackTrace();

        }

          //处理输入:

          while(true){

               try {

                   //按行处理

                String lin=br.readLine();

                n--;

                //对每一行的单词单独处理

                String[] strings = lin.split("\\s");

                for(String k:strings){

                    //判断计数

                    if(!"".equals(k)&&words.get(k)!=null){

                        int wordCount=words.get(k);

                        words.put(k,wordCount+1);

                    }else if(k!=null&&!"".equals(k)){

                        words.put(k, 1);

                    }



                }

            } catch (IOException e) {

                e.printStackTrace();

            }

               //处理完所有行时,跳出

              if(n<1)break;

          }

            //获得Map的键值对并存到Entry

        List<Entry<String, Integer>> sortList=new ArrayList<>(words.entrySet());

           //进行排序,实现Comparator接口

        Collections.sort(sortList, new Comparator<Entry<String, Integer>>() {



            @Override

            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {

                //次数大的放前面

                if(o1.getValue()>o2.getValue())

                    return -1;

                //次数相同的按,单词排序

                else if(o1.getValue()==o2.getValue())

                    return o1.getKey().compareTo(o2.getKey());

                return 0;

            }

        });

        //循环输出:

        for(Entry<String, Integer> e:sortList){



            System.out.println(e.getKey()+" "+e.getValue());

        }

      }

}

4.我的测试结果:

01

好的本章介绍到这里
来自伊豚wpeace(rlovep.com)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值