某知名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

    

Leetcode:在线编程网站-各大IT公司的笔试面试题

leetcode 是一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题,对于应届毕业生找工作是一个不可多得的好帮手。 这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么...

某国内知名自主研发游戏公司C++笔试题

那天去霸笔的,冒死偷拍,实在不清楚的没有往上放,供大家参考下

各知名公司面试笔试题

  • 2010年11月03日 20:48
  • 206KB
  • 下载

两道最近收到某好公司的笔试题。

前天收到携程的邮件,查看附件中有两道笔试题,遂分享给大家。 题一:一个顺序数组,从中间某位置截断,后半部分尾部连接前半部分头部,形成了一个新数组例如(1,3,6,8,9),从第二位截断后重新拼接,形...

2013年各大IT公司研发类笔试题

不可以看见的部分请见http://www.wypblog.com/archives/262一、百度(武汉地区)第一部分:1、描述数据库的简单操作。2、描述TCP\IP四层模型,并简述之。3、描述MVC...

各大IT公司校园招聘程序猿笔试、面试题集锦

百度一面 1、给定一个字符串比如“abcdef”,要求写个函数编程“defabc”,位数是可变的。这个比较简单,我用的是strcpy和memcpy,然后他问有什么优化的办法,我就不知道了。 ...

各大IT公司校园招聘程序猿笔试、面试题集锦

各大IT公司校园招聘程序猿笔试、面试题集锦 分类: 面试珠玑2012-09-09 11:38 18286人阅读 评论(9) 收藏 举报 面试招聘算法数据结构数据库阿里巴巴 目录(?)[+...
  • mmbbz
  • mmbbz
  • 2017年02月21日 09:10
  • 3571

各大IT公司校园招聘程序猿笔试、面试题集锦

转自:http://blog.csdn.net/hackbuteer1/article/details/7959921#t4 百度一面 1、给定一个字符串比如“abcdef”,要求写个函数编程“d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:某知名IT公司最近的一道笔试编程题
举报原因:
原因补充:

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