最大的相同字符子串

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值