马拉车算法
#include<bits/stdc++.h>
using namespace std;
string chu(string a)
{
int n=a.length();
string s;
s.resize(n*2+3);
s[0]='$'; //防止数组越界
s[1]='#';
for(int i=1;i<=a.length();i++)
{
s[i*2]=a[i-1];
s[i*2+1]='#';
}
return s;
}
int mala(string a)
{
string s=chu(a);
cout<<s<<endl;
int len[1000],mx=0,malen=-1,mid;
for(int i=1;i<s.length();i++)
{
if(i<mx)
len[i]=min(len[mid*2-i],mx-i);
else
len[i]=1;
while(s[i-len[i]]==s[i+len[i]]) //当i=1时,len[i]=1,
//如果初始化没有用不同字符标记,会越界
len[i]++; //以len[i]作为循环的控制因素
if(i+len[i]>mx)
{
mx=i+len[i];
mid=i;
}
malen=max(malen,len[i]-