Poj 3974 回文串--Manacher

原创 2013年12月02日 09:14:15
//最长回文
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 1000000 + 10;

char Ma[maxn*2];
int Mp[maxn*2];

void Manacher(char s[],int len)
{
	int l=0;
	Ma[l++]='$';
	Ma[l++]='#';
	for(int i=0;i<len;i++)
	{
		Ma[l++]=s[i];
		Ma[l++]='#';
	}
	Ma[l]=0;
	int mx=0,id=0;
	for(int i=0;i<l;i++)
	{
		Mp[i]=mx>i?min(Mp[2*id-i],mx-i):1;
		while(Ma[i+Mp[i]]==Ma[i-Mp[i]]) Mp[i]++;
		if(i+Mp[i]>mx)
		{
			mx=i+Mp[i];
			id=i;
		}
	}
}

char s[maxn];

int main()
{
	int cnt=1;
	while(~scanf("%s",s))
	{
		if(strcmp(s,"END")==0) break;
		int len=strlen(s);
		Manacher(s,len);
		int ans=0;
		for(int i=0;i<2*len+2;i++)
			ans=max(ans,Mp[i]-1);
		printf("Case %d: %d\n",cnt++,ans);
	}
	return 0;
}

相关文章推荐

POJ-3974-Palindrome- Manacher 马拉车算法(On寻找最长回文串)

http://poj.org/problem?id=3974 马拉车算法的讲解,这个地方讲得很详细:http://www.cnblogs.com/grandyang/p/4475985.html ...
  • viphong
  • viphong
  • 2016年01月08日 09:51
  • 451

hdu3068 最长回文 poj3974 Palindrome(Manacher算法)

#include #include #include #include using namespace std; char a[110005],str[220010]; int p[220010]; ...
  • turbo_7
  • turbo_7
  • 2013年05月21日 23:56
  • 404

POJ 3974 Palindrome 回文串

求最长回文串  由于数据大  需要O(n)的算法  Manacher算法 这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做回文串问题中时比较烦的地...

Poj:3974 回文串

Description Andy the smart computer science student was attending an algorithms class when the pr...

POJ 3974 Palindrome 最长回文子串(manacher算法)

【题意简述】:如题,找出最长的回文字串! 【思路】:看完题的第一反应时枚举求解!但是数据量很大,字符串的长度可达1000000,若暴力求解,很明显会是O(n^2),所以一定会超时! 这里贴出我的超时代...

POJ 3974 Palindrome 求最长回文子串 Manacher

纯模板题,用来练手,模板记错贡献一次wa。 Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submi...

poj3974 Palindrome [字符串回文]

本题的题意是给你一个字符串 让你判断这个字符串中最长的回文子串的长度 嗯 这题可以用O(n)的时间复杂度的manacher算法来处理 manacher在很久前就知道了,但是只是知道了怎么去构造但是还没...

最长回文 (hdu3068 && poj3974)Palindrome

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi...

POJ:3974 Palindrome (Manacher算法)

Manacher算法:在O(n)的时间内求得最长回文子串。   在这里简单说一下这个算法。 首先在原字符串s之间加入一个特殊字符(原串中没有的)#作为标记构造一个新串ss。这样做可以其实可以把最长回文...
  • kkkwjx
  • kkkwjx
  • 2013年09月07日 21:18
  • 573

poj3974:Palindrome(manacher模板)

DescriptionAndy the smart computer science student was attending an algorithms class when the profes...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Poj 3974 回文串--Manacher
举报原因:
原因补充:

(最多只允许输入30个字)