马拉车算法板子

#include
#include
#include
using namespace std;
const int maxn=1e6+5;
char s[maxn*2],str[maxn*2];
int Len[maxn*2],len;
void getstr(){
    int k=0;
    str[k++]='@';
    for(int i=0;ii) Len[i]=min(Len[2*id-i],mx-i);
        else Len[i]=1;
        while(str[i+Len[i]]==str[i-Len[i]])
            Len[i]++;
        if(Len[i]+i>mx)
            mx=Len[i]+i,id=i;
    }
}
int main(){
    scanf("%s",s);
    len=strlen(s);
    getstr();
    manacher();
    int ans=1;
    for(int i=1;i

 

你可能感兴趣的:(字符串)