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;
}

[算法系列之七]Manacher算法之最大回文子串

回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。 回文子串,顾名思义,即字符串中满足回文性质的子串。 经常有一些题目围绕回文子串进行讨论,比如 ...
  • SunnyYoona
  • SunnyYoona
  • 2014年10月23日 09:45
  • 3212

回文字符串--manacher算法

回文串定义: “回文串” 是一个正读和反读都一样的字符串, 比如 “level ” 或者 “noon” 等等就是回文串。 回文子串,顾名思义,即字符串中满足回文性质的子串。 经常有一些题目围绕回文子串...
  • u011637069
  • u011637069
  • 2014年08月18日 17:15
  • 355

Poj:3974 回文串

Description Andy the smart computer science student was attending an algorithms class when the pr...
  • lkbsbird
  • lkbsbird
  • 2016年07月07日 14:20
  • 79

(经典)POJ-3280 回文串DP

题目大意:给定一个字符串S及其长度M与S所含有的字符种数N(最多26种小写字母),然后给定这N种字母Add与Delete的代价,求将S变为回文串的最小代价和。 题目链接:点击打开链接 分析: ...
  • AC_hell
  • AC_hell
  • 2016年05月12日 19:36
  • 549

POJ 3974 求回文串

Description Andy the smart computer science student was attending an algorithms class when the prof...
  • sulisulisu
  • sulisulisu
  • 2016年07月28日 20:10
  • 105

51nod-【1089 最长回文子串 V2(Manacher算法)】

1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 ...
  • Cai_Nia
  • Cai_Nia
  • 2016年10月31日 21:51
  • 281

poj 3974 Manacher算法(判断最长回文子串)

题意:给定一个字符串,求其最长回文子串。 思路:暴力O(n^3),遍历中间节点向两边扩展O(n^2)。然后Manacher的O(n)算法是最优算法。以下内容转自(http://blog.csdn.n...
  • dumeichen
  • dumeichen
  • 2015年12月09日 09:16
  • 251

POJ 3974 Palindrome(最大回文串长度 Manacher算法)

Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 5712   Ac...
  • u014361775
  • u014361775
  • 2015年08月12日 10:56
  • 197

HihoCoder第一周与POJ3974:最长回文字串

这个题目是hihoCoder第一周的题目,自己打算从第一周开始做起,不知道能追上多少,更不知道这一篇写完,下一篇会是什么时候。。。 题意很简单。 输入: 3 abababa aaaabaa acac...
  • u010885899
  • u010885899
  • 2015年04月29日 14:53
  • 612

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

题意:给出一个字符串,求出最长回文字串。 思路:一开始我直接上了后缀数组DC3的解法,然后MLE了。看了DISCUSS发现还有一种计算回文字串更加优越的算法,就是manacher算法。就去学习了一下...
  • kdqzzxxcc
  • kdqzzxxcc
  • 2013年09月06日 14:43
  • 1140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Poj 3974 回文串--Manacher
举报原因:
原因补充:

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