最长回文 HDU - 3068

模板题,同样没有难度。
顺便一提,因为Manacher的算法他会预处理插入分割符
所以我们无论在统计长度还是其他什么信息时是相对比较麻烦的
有时候甚至是要进行分类讨论。
难点就在这里

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int max_n = 3e5+100;
int n;
void Manacher(char s[],int d[],char ts[]){
    int m=n*2+1;
    fill(d,d+m+10,1);
    for (int i=0,j=0;i<n;++i){
        ts[j++]='#';ts[j++]=s[i];
    }ts[m-1]='#';ts[m]='\0';
    for (int i=0,j=-1,t=0;i<m;++i){
        if (j>=i)d[i]=min(j-i+1,d[(t<<1)-i]);
        while (i+d[i]<m&&i-d[i]>=0&&ts[i+d[i]]==ts[i-d[i]])++d[i];
        if (i+d[i]>j)j=i+d[i]-1,t=i;
    }
}

char s[max_n],ts[max_n<<1];
int d[max_n<<1];
int main(){
    while (~scanf("\n%s",s)){
        n = strlen(s);
        Manacher(s,d,ts);
        n = n*2+1;
        int len = 1;
        for (int i=1;i<n;++i){
            if (i&1)len = max(len,d[i]-1);
            else len = max(len,(d[i]>>1)<<1);
        }printf("%d\n",len);
    }
}
Kuangbin题单详解(kmpManacher) 文章被收录于专栏

刷Kuangbin题

全部评论

相关推荐

冷花幽露:大概率是了,京东面试就是这样。我上周一面也是20多分钟,面试官问的很刁钻的问题也答上来了,面完过了几天还是没推进,泡池子,昨天一看挂了。如果一面完第2天没有收到2面邀请,基本上不用抱希望了。如果你的bg是985,面试流程也是和我们一样,20多分钟,唯一区别就是面完他们会很快收到二面邮件,而不像我们泡池子然后挂掉
点赞 评论 收藏
分享
瑞雪兆丰年_:可以贴个超级大的校徽,以防HR眼拙
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务