📚【模板】manacher

时间复杂度是\(\operatorname{O}(n)\)

int p[N];
void manacher(const char *in) {
	int len = strlen(in);
	int mid = 0, R = 0;
	p[0] = 1;
	for(int i = 1;i < len;++i) {
		if(i < R) 
			p[i] = min(p[mid*2-i],R-i+1);
		while(in[i-p[i]] == in[i+p[i]]) 
			p[i]++;
		if(p[i]+i > R) {
			R = p[i]+i-1;
			mid = i;
		}
	}
}
posted @ 2022-07-22 21:33  bikuhiku  阅读(16)  评论(0编辑  收藏  举报