• luogu P3805 【模板】manacher算法


    题目描述

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.

    字符串长度为n

    输入格式

    一行小写英文字符a,b,c...y,z组成的字符串S

    输出格式

    一个整数表示答案


    马拉车算法,O(n)解决,巧妙的利用对称性

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=11000000+20;
    char data[N<<1];
    int p[N<<1],cnt,ans;
    inline void qr(){
    	char c=getchar();
    	data[0]='~',data[cnt=1]='|';
    	while(c<'a'||c>'z')c=getchar();
    	while(c>='a'&&c<='z')
    	data[++cnt]=c,data[++cnt]='|',c=getchar();
    }
    int main(){
    	qr();
    	for(int t=1,r=0,mid=0;t<=cnt;++t){
    		if(t<=r)p[t]=min(p[(mid<<1)-t],r-t+1);
    		while(data[t-p[t]]==data[t+p[t]])++p[t];
    		if(p[t]+t>r)r=p[t]+t-1,mid=t;
    		if(p[t]>ans)ans=p[t];
    	}
    	printf("%d
    ",ans-1);
    }
    
  • 相关阅读:
    javaweb:Filter过滤器
    javaScript:高级
    javascript:基础
    Boostrao:轮播图
    Bootstrap案列:首页界面
    Bootstrap学习笔记
    javaweb:respone
    javaweb:jsp
    五、结构型模式--->07.享元模式
    五、结构型模式--->06.组合模式
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/11753566.html
Copyright © 2020-2023  润新知