请编写一个 C 函数,该函数在一个字符串中找到可能最长子字符串,该字符串是由同一字符组成的。
【感谢网友的指正,让俺能及时发现自己考虑问题的不当之处。】
下面是完整源代码:
【经网友指正,这是一种错误的算法,后面将会帖出修改后的程序。】
void StrSame(char * ch)
{
int TempCH[26];
int i,MaxLen =1,local;
for(i=0;i<26;i++)
TempCH[i] = 200;
while(*ch != '/0')
{
if(*ch == *(ch+1) || *ch == *(ch-1))
{
if(TempCH[*ch-0x61] == 200)
TempCH[*ch-0x61] = 1;
else
TempCH[*ch-0x61]++;
}
ch++;
}
for(i=0;i<25;i++)
{
if(TempCH[i] != 200 && TempCH[i+1] != 200)
{
if(TempCH[i]>TempCH[i+1])
{
if(MaxLen < TempCH[i])
{
MaxLen = TempCH[i];
local = i;
}
}
else
{
if(MaxLen < TempCH[i+1])
{
MaxLen = TempCH[i+1];
local = i+1;
}
}
}
}
printf("Character = %c/tNumber = %d/n",local+0x61,MaxLen);
}
main()
{
StrSame("abcdddaaaaabbbeefffda");
}
【修改后的程序】
void StrSame(char * ch)
{
int TempCH[26];
int i,MaxLen =1,local,count=0;
for(i=0;i<26;i++)
TempCH[i] = 200;
while(*ch != '/0')
{
if(*ch == *(ch+1) || *ch == *(ch-1))
{
count++;
if(*ch != *(ch+1))
{
if( (TempCH[*ch-0x61] == 200) || count > TempCH[*ch-0x61])
TempCH[*ch-0x61] = count;
count = 0;
}
}
ch++;
}
for(i=0;i<25;i++)
{
if(TempCH[i] != 200 && TempCH[i+1] != 200)
{
if(TempCH[i]>TempCH[i+1])
{
if(MaxLen < TempCH[i])
{
MaxLen = TempCH[i];
local = i;
}
}
else
{
if(MaxLen < TempCH[i+1])
{
MaxLen = TempCH[i+1];
local = i+1;
}
}
}
}
printf("Character = %c/tNumber = %d/n",local+0x61,MaxLen);
}
main()
{
StrSame("abcdddaaaaabbbeefffda");
StrSame("aabcdddaaaaabbbeefffda");
StrSame("aaaaaabcdddaaaaabbbeefffda");
StrSame("aaabcdddaaaaabbbeefffdaaaaaa");
StrSame("aaabcdddaaaaabbbeefffdaaaaaab");
system("pause");
}
【如还有啥问题,欢迎您能指正,共同促进,共同进步,谢谢!】