manachar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了manachar相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>
using namespace std;
char str[20005],str1[40005],len=0;
int p[40005];
int manachar(){
int id=0,maxn=0,ans=0,j=1;
	str1[0]=‘@‘;
	for(int i=0;i<=len;i++){
		str1[j++]=str[i];
		str1[j++]=‘#‘;
	}
	str1[j]=0;
	for(int i=0;i<j;i++){
		if(i<maxn)
			p[i]=max(maxn-i,p[2*id-i]);
		else
			p[i]=1;
		while(str1[i+p[i]]==str1[i-p[i]])
			p[i]++;
		if(p[i]+i>maxn){
			maxn=p[i]+i;
			id=i;
		}
		ans=max(ans,p[i]);
	}
	return ans-1;
}
int main(){
	while((str[len]=getchar())!=EOF)len++;
	len--;
	cout<<manachar();
	return 0;
}

  

以上是关于manachar的主要内容,如果未能解决你的问题,请参考以下文章

manachar

hdu 3613 Best Reward (manachar算法)

Manachar's Algorithm

UVA 11888 - Abnormal 89&#39;s(Manachar)

hihocoder 1032 manachar 求回文串O(n)

hdu--3068 最长回文串(manachar模板)