寻找最长重复字串,若有长度相同的则输出ASCII最小的那串
注意事项:
1.注意临界问题;
2.本代码使用的的跳转。当每一次找完一种字符时i跳转至下一个与其不同的字符,这样的话,j就因为for循环指向i+1了,所以count除了初始化等于0;之后的每次count都要等于1。
#include <stdio.h>
#include <string.h>
int main()
{
char Arr[1024] = {0};
while(scanf("%s", Arr) != EOF)
{
int i, j, count = 0,loc = 0;
int max = 0;
int len = strlen(Arr);
for(i = 0; i < len; i++)
{
for(j = i; j <= len; j++)
{
if(Arr[i] == Arr[j])
{
count++; //计算重复字符个数
}
if(Arr[i] != Arr[j] )
{
if(count < max)
{
break;
}
if(count > max)
{
max = count; //新的重复字符个数大于之前的
loc = i; //loc -- 确定重复字符的起点
}
if(count == max)
{
if(strcmp(&Arr[i], &Arr[loc]) < 0)
{
loc = i;
max = count;
}
}
count = 1;
i = j;
}
}
}
while(max > 0)
{
printf("%c",Arr[loc]);
loc++;
max--;
}
printf("\n");
}
return 0;
}