最大的相同字符子串

来源:互联网 发布:java接口可以多继承吗 编辑:程序博客网 时间:2024/05/04 18:38

 请编写一个 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");
}

【如还有啥问题,欢迎您能指正,共同促进,共同进步,谢谢!】