马拉车算法

#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
   char str[1000];
   char str1[2000];
   int a[2000];
   int res[2000];
   int i,j;
   while(gets(str)!=NULL)
   {
       j=1;
       for(i=0;i        {
           str1[j]=str[i];
           j+=2;
       }
       for(j=0;j<2*strlen(str)+1;j+=2)str1[j]='#';
       str1[j+1]='\0';
       a[0]=1;
       int p=1;
       int p0=0;
       for(i=1;i        {
           if(i            {
               int j=2*p0-i;
               if(a[j]                else
               {
                   int k=1;
                   while(2*i-p-k>=0&&str1[p+k]==str1[2*i-p-k])k++;


                       a[i]=p+k-i;
                       p=p+k-1;
                       p0=i;
               }
           }
           else
           {
               int k=1;
               while(i-k>=0&&str1[i+k]==str1[i-k])k++;
                   a[i]=k;
                   p=i+k-1;
                   p0=i;
           }
       }
        for(i=0;i         cout<    }


    return 0;
}

你可能感兴趣的:(算法)