hdu 3068

来源:互联网 发布:淘宝一个店铺几个类目 编辑:程序博客网 时间:2024/06/04 00:41

求最长回文子串长度…完了今天一下午好颓废啊…


#include<bits/stdc++.h>using namespace std;const int MAXN=3e5;char str[MAXN],s[MAXN];int p[MAXN],len1,len2;;void init(){    str[0]='$';    str[1]='#';    for(register int i=0;i<len1;i++){        str[i*2+2]=s[i];        str[i*2+3]='#';    }    len2=len1*2+2;    str[len2]='*';}void manacher(){    int id=0,mx=0;    for(register int i=1;i<len2;i++){        if(mx>i) p[i]=min(p[2*id-i],mx-i);        else     p[i]=1;        for(;str[i+p[i]]==str[i-p[i]];p[i]++);        if(mx<i+p[i]){mx=i+p[i];id=i;}    }}int main(){    while(scanf("%s",s)!=EOF){        len1=strlen(s);        init();        manacher();        int ans=0;        for(register int i=0;i<len2;i++)ans=max(ans,p[i]);        cout<<ans-1<<endl;    }    return 0;} 

这里写图片描述

原创粉丝点击