代码是下面这部分,刚赶出来的,基本能完成功能,不过不知谁能提供更简便的算法
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");
}
}
}
}
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");
}
}
}
}
如果不考虑内存空间的话,可以用空间换时间,用位图算法: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,直接索引,不用查询,效率最高
}
改为:
for(int y=0;y <100000;y++) //将count数组的每个单元初始为0
楼上的用array来做,太耗空间
数组太大会不会消耗内存呢用哈希表的好处具体是在哪,比起array有什么优点,谁能说的具体点啊