首页 > 编程语言 > 详细

P3805 【模板】manacher算法

时间:2019-11-14 20:59:58      阅读:84      评论:0      收藏:0      [点我收藏+]

题目描述

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

字符串长度为n

输入格式

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

输出格式

一个整数表示答案

输入输出样例

输入 #1
aaa
输出 #1
3

说明/提示

字符串长度len <= 11000000

 

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
char data[22000666];
int p[22000666],cnt,ans;
void read(){
	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(){
	read();
	for(int t=1,r=0,mid=0;t<=cnt;++t){
        if(t<=r){
			p[t]=min(p[mid*2-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);
	return 0;
}

  

 

P3805 【模板】manacher算法

原文:https://www.cnblogs.com/xiongchongwen/p/11861979.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!