代码是下面这部分,刚赶出来的,基本能完成功能,不过不知谁能提供更简便的算法
PS:我是学生,这是我们学校实验室里招人出的题,当时没做好,现在给补起来了,不过还是给进了,嘿嘿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace String
{
    class Program
    {
        static void Main(string[] args)
        { 
            string str = "我爱中国我是中国人";    //源字符串
            int len=str.Length;
            char[] strArray=str.ToCharArray();
            int[] count=new int[len];
            for(int y=0;y<len;y++)    //将count数组的每个单元初始为0
                count[y]=0;            for(int y=0;y<len;y++)    //将当前字符与之后的字符进行比较,相同count数组中对应索引处++
            {  
                for(int yy=y;yy<len;yy++)
                {
                    if(strArray[y].Equals(strArray[yy]))
                    {
                        count[y]++;
                    }
                }
            }            ArrayList maxCountArr=new ArrayList();
            int maxCount=count[0];            for(int y=0;y<len-1;y++)      //获得出现次数的最大值
            {
                if(count[y+1]>count[y])
                {
                    maxCount = count[y + 1];
                }
            }
            for(int y=0;y<len-1;y++)      //最大值与count数组中的每个数进行比较,相同则出现次数相同,把索引加入到maxCountArr
            {
              if(count[y]==maxCount)
              {
                  maxCountArr.Add(y);
              }
            }
            for (int y = 0; y < maxCountArr.Count; y++)     //输出
            {
                Console.Write("Str" + (y + 1) + ":" + strArray[(int)maxCountArr[y]] + "\n");
            }
        }
    }
}

解决方案 »

  1.   

    running time is O(n),应该已经是效率最高的了吧
      

  2.   

    恩,字符量大用HashTable比楼主的遍历要快很多
    如果不考虑内存空间的话,可以用空间换时间,用位图算法:string str = "我爱中国我是中国人";    //源字符串 int len=str.Length; 
    char[] strArray=str.ToCharArray(); int[] count=new int[100000]; 
    for(int y=0;y <len;y++)    //将count数组的每个单元初始为0 
       count[y]=0; for(int y=0;y <len;y++)  
    {   
       count[((int)strArray[y])] ++;  // 直接用字符的码来做index,直接索引,不用查询,效率最高
    }
      

  3.   

    for(int y=0;y  <len;y++)    //将count数组的每个单元初始为0  
    改为:
    for(int y=0;y  <100000;y++)    //将count数组的每个单元初始为0 
      

  4.   

    的确hashtable在字符量大的时候,效能会高很多
    楼上的用array来做,太耗空间
      

  5.   

     count[((int)strArray[y])] ++;  // 直接用字符的码来做index,直接索引,不用查询,效率最高 
    数组太大会不会消耗内存呢用哈希表的好处具体是在哪,比起array有什么优点,谁能说的具体点啊