马拉车模板.因为不是很重要.加上原理经常忘记.这里贴一下,以备不时之需.

void Manacher(char *s,int len){

    int l=0;

    Ma[l++]='$';

    Ma[l++]='#';

    for (int i=0; i<len; i++){

        Ma[l++]=s[i];

        Ma[l++]='#';

    }

    Ma[l]=0;

    int mx=0,id=0;

    for (int i=0; i<l; i++){

        Mp[i]=mx>i ? min(Mp[2*id-i],mx-i) : 1;

        while (Ma[i+Mp[i]] == Ma[i-Mp[i]]) Mp[i]++;

        if (i+Mp[i] > mx) {

            mx=i+Mp[i];

            id=i;

        }

    }

}