某知名IT公司最近的一道笔试编程题

原创 2007年09月26日 13:07:00

                                某知名IT公司最近的一道笔试编程题
       因为笔试时答应对题目保密,故在此就不说出公司名了。欢迎交流,共同探讨。

一 问题描述
    给定任一字符串(可以有中文),长度为任意,要求找出其出现次数最多的字符及计算次数。

二 分析
     在JAVA中,所有的字符可以统一用unicode表示。在最坏的情况下(即字符串中所有的字符均不相同),至少需要String.length()个存储单元(用数组存储),下面就是考虑把String中的每一字符映射到array[0]到array[length-1]的数组中。自然想到用Hash Table来实现,Hash函数可以定义为 int position=unicode%c.length  看代码吧,注释很详细。

三 源代码
  
  /**
 * @(#)CountChar.java
 *
 *
 * @author    LUORUI
 * @version 1.00 2007/9/25
 */

class item {                    //定义哈希表中的元素
 public char a;
 public int  count=0;  
 public item  ( )   {       
  this.a=' ';
  this.count= 0;
  
    }
 
}

public class CountChar {
       
   
    public  static  void getMaxchar(String s){
       char[] c=s.toCharArray();
       item[] ht=new item[c.length];         //最坏的情况下(每个字符均不一样),需要c.length个存储单元
       
       for(int i=0;i<=c.length-1;i++){     //赋初值,防止出现空指针引用 ********小心******
            
          ht[i]=new item  ( ) ;
 }

       item Maxitem=ht[0];
       for(int i=0;i<=c.length-1;i++){
         int unicode=(int)c[i];              // 获得字符的unicode值 ()
         int position=unicode%c.length;      //自定义的Hash函数
       
        if (ht[position].count==0)   {       //第一次扫描到的字符放入数组中
           ht[position].a=c[i];
           ht[position].count=1;
  }
        else
           if  (ht[position].a==c[i])      //扫描到了同样的字符,count加1
            ht[position].count++;
           else  for (int j= position+1;j!= position-1;position++ ) {  //Hash表发生地址冲突,用线形探测法解决地址冲突
                    if (ht[position].count==0)  {                
                     ht[position].a=c[i];
                     ht[position].count=1;                            //找到空位置,插入 
                                 break;   }                                    // 找到,跳出循环     
                    if (position==c.length-1)                    //往后找,无空位可插入,则往前找
                        position=0;
           } 

       }
       for(int i=1;i<=c.length-1;i++){              //遍历数组,找到一个最大值
          
           if (ht[i].count> Maxitem.count  )       
               Maxitem=ht[i];
       }        
    
    
       for(int i=1;i<=c.length-1;i++){               //遍历数组,找到所有的最大值,譬如”31212“这种多个最大值情况
               if (  ht[i].count==  Maxitem.count )
                  System.out.println("出现次数最多的字符是:"+ht[i].a+"  次数是:"+ ht[i].count );
  }       
    }
 
public static void main(String[] args) {
        
CountChar.getMaxchar("本代码的作者是IT55551985euiollgjIT5riugjkj51ITIT1IT45ITITdjjkklITITdfjIT瑞");    

                                                        }   //供测试用的字符串
}

结果输出  C:/>javac CountChar.java


C:/>java  CountChar
出现次数最多的字符是:I  次数是:10
出现次数最多的字符是:T  次数是:10

    

某知名IT公司最近的一道笔试编程题(C#)

给定任一字符串(可以有中文),长度为任意,要求找出其出现次数最多的字符及计算次数。 using System;using System.Collections.Generic;using System...
  • fghshy
  • fghshy
  • 2007年11月10日 15:42
  • 678

一些招聘公司的笔试编程题

这一篇博文将会将近期写过的部分笔试程序题汇总到这里,将会不定期的更新。、、 /** 注意下面的所有的代码将主要是c语言的形式实现,假如需要会有部分c++代码。 为啥不用其他的高级语言,原因是我不...
  • woshidahuaidan2011
  • woshidahuaidan2011
  • 2016年07月21日 22:02
  • 5711

网易2018校招内推Android笔试编程题一道

题目: 输入一个数组,长度不超过2*10^5,数组元素为整数,大小不超过10^9,从第一个位置依次取元素并添加到新数组末尾,每取一次就逆序操作一次,直到取完所有元素。最后输出这个逆序操作多次后的新数...
  • ysy950803
  • ysy950803
  • 2017年08月12日 18:53
  • 606

2017年携程旅游校招Java研发笔试编程题(3个)

股票利润 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 假如一个数组中存储了一个股票,在一天...
  • wyongan1128
  • wyongan1128
  • 2016年09月17日 21:49
  • 1974

某国际知名IT公司笔试

    这段时间没怎么顾及自己的这个“一寸土地”, 实在惭愧。因为这些天小弟又经历了“职业生涯”中的一个小小转折----跳槽去了某个在移动通信行业比较龙头的几个国际大公司之一。鉴于对职业操守的尊敬,请...
  • lazy_tiger
  • lazy_tiger
  • 2007年09月19日 11:17
  • 1829

某知名公司笔试题目

C/C++测试题 答题人:日期: 一.C语言部分a)         关键字volatile有什么含意?并给出三个不同的例子                  b)        关键字static的...
  • lgy198612
  • lgy198612
  • 2010年08月26日 23:32
  • 192

面试-机试-编程题--剑指offer

题记:题目不算很难,但是自己太不数量了。捉急,感觉如果要用java写代码的话,必须要把集合那部分用的很熟才行。 这个题目涉及到用list存数组,map取值,还有就是怎么才能根据控制台中输入的是几行的数...
  • u011563903
  • u011563903
  • 2015年08月11日 20:10
  • 1550

每天一道编程题(1)

现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。 输入描述: 一行五个整数...
  • yj1499945
  • yj1499945
  • 2015年09月24日 10:15
  • 598

每天一道编程题(3)

有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi。规则是将数字为xi的篮球投到xi除p的余数为编号的袋里。若袋里已有篮...
  • yj1499945
  • yj1499945
  • 2015年09月26日 21:24
  • 477

常见java笔试-编程题

1-以指定编码,输出字符串 public class Bianma { public static void main(String[] args) throws UnsupportedEncod...
  • luxun2014
  • luxun2014
  • 2014年11月26日 21:29
  • 2104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:某知名IT公司最近的一道笔试编程题
举报原因:
原因补充:

(最多只允许输入30个字)