马拉车模板.因为不是很重要.加上原理经常忘记.这里贴一下,以备不时之需.
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;
}
}
}
京公网安备 11010502036488号