char s[maxn << 1];
int p[maxn << 1];
int Len[maxn];
void manacher(){
int len = strlen(s), id = 0, maxlen=0;
for(int i = len; i >= 0; --i){
s[i + i + 2] = s[i];
s[i + i + 1] = '#';
}
s[0] = '*';
for(int i = 2; i < 2 * len + 1; ++i){
if(p[id] + id > i) p[i] = min(p[2 * id - i], p[id] + id - i);
else p[i] = 1;
while(s[i - p[i]] == s[i + p[i]]) ++p[i];
if(id + p[id] < i+p[i]) id = i;
if(i % 2 == 0) Len[i / 2 - 1] = p[i] - 1;
}
}
manacher算法模板
最新推荐文章于 2023-01-28 10:14:31 发布