首页 > 代码库 > 最长回文子串O(n)
最长回文子串O(n)
1 #include <iostream> 2 #include <string.h> 3 #include <algorithm> 4 #include <stdio.h> 5 #include <math.h> 6 using namespace std; 7 8 int Proc(char pszIn[],char pszOut[]) 9 {10 int nLen=1;11 pszOut[0]=‘$‘;12 int i=0;13 while(pszIn[i]!=‘\0‘)14 {15 pszOut[nLen++]=‘#‘;16 pszOut[nLen++]=pszIn[i];17 i++;18 }19 pszOut[nLen++]=‘#‘;20 pszOut[nLen]=0;21 return nLen;22 }23 void Manacher(int *p,char *str,int len)24 {25 int mx=0,id=0;26 for(int i=0;i<len;i++)27 {28 p[i]=mx>i?min(p[2*id-i],mx-i):1;29 while(str[i+p[i]]==str[i-p[i]])p[i]++;30 if(i+p[i]>mx)31 {32 mx=i+p[i];33 id=i;34 }35 }36 }37 const int MAXN=2200010;38 char strIn[MAXN];39 char strOut[MAXN];40 int p[MAXN];41 int main()42 {43 int t;44 scanf("%d",&t);45 while(t--)46 {47 scanf("%s",strIn);48 int nLen=Proc(strIn,strOut);49 Manacher(p,strOut,nLen);50 int ans=1;51 for(int i=0;i<nLen;i++)52 ans=max(ans,p[i]);53 printf("%d\n",ans-1);54 }55 return 0;56 }
hihocoder
最长回文子串O(n)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。