首页 > 代码库 > 最长回文子串
最长回文子串
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<queue>#include<vector>#include<cstring>#include<cmath>#include<map>using namespace std;typedef long long ll;#define N 2011111char s1[N],s[N];int p[N],len;void init(){ for(int i=0; i<len; i++){ s[i*2]=‘*‘; s[i*2+1]=s1[i]; } s[len*2]=‘*‘; len=len*2+1;}int sk(){ int mx=-1,id,ss=-1; for(int i=0;i<len;i++){ if(mx>i)p[i]=min(p[2*id-i],mx-i); else p[i]=1; while(s[i-p[i]]==s[i+p[i]]&&i-p[i]>=0&&i+p[i]<len)p[i]++; if(mx<i+p[i]){ mx=i+p[i]; id=i; } ss=max(ss,p[i]); } //for(int i=0;i<len;i++)printf("%3c",s[i]);cout<<endl; //for(int i=0;i<len;i++)printf("%3d",p[i]);cout<<endl; return ss-1;}int main(){ int n; scanf("%d",&n); while(n--){ scanf("%s",&s1); len=strlen(s1); init(); printf("%d\n",sk()); } return 0;
}
最长回文子串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。