poj3974(最长回文串)(Manacher算法)
来源:互联网 发布:网络借贷平台风险 编辑:程序博客网 时间:2024/06/15 21:13
题意:给一个字符串,求连续最长的回文子串的长度。
思路:Manacher算法(很高效的线性复杂度)。记得上学期看过,这次又做居然全忘了。。。sad,。,。又看了一遍题解才会敲。贴上题解http://hi.baidu.com/735612658gfy/item/e302f391112dff0b924f4176
代码:
#include <iostream>#include <vector>#include <stdio.h>#include <cstring>using namespace std;char tool[2000010];int ans[2000010];char s[1000010];int n;void pre(){ tool[0]='%'; tool[1]='#'; n=2; int str=strlen(s); for(int i=0;i<str;i++) { tool[n++]=s[i]; tool[n++]='#'; }tool[n++]='#';}int main(){ int cas=0; while(scanf("%s",s)!=EOF) { cas++; if(s[0]=='E') break; pre(); int out=0; int right=0,mi=0; ans[0]=1; for(int i=1;i<n;i++) { if(i<=right) ans[i]=min(ans[mi*2-i],right-i+1); else ans[i]=1; while(tool[i+ans[i]]==tool[i-ans[i]]) ans[i]++; if(i+ans[i]-1>right) right=i+ans[i]-1,mi=i; out=max(out,ans[i]-1); } printf("Case %d: %d\n",cas,out); } return 0;}
0 0
- poj3974(最长回文串)(Manacher算法)
- Poj3974 最长回文子串 Manacher算法
- hdu3068 最长回文 poj3974 Palindrome(Manacher算法)
- POJ3974-Manacher算法--O(n)回文子串算法
- POJ3974 最长回文子串 Manacher
- poj3974 manacher算法,最大回文子串
- poj3974 Palindrome (最长回文子串)
- Manacher算法(最长子回文串)
- 最长回文子串(Manacher算法)
- 最长回文子串(Manacher算法)
- 最长回文(Manacher算法)
- POJ3974 Palindrome(Manacher算法)
- poj3974 Palindrome,回文串,Manacher
- 最长回文(manacher)串
- 最长回文子串算法-- Manacher算法--O(n)
- Manacher算法--O(n)最长回文子串算法
- 最长回文 (hdu3068 && poj3974)Palindrome
- 最长回文(manacher算法)(fromHDU)
- poj1862(哈夫曼数)
- poj1456(贪心加并查集)
- poj3399(简单数学)
- poj2955(括号匹配DP)
- 西工大ACM校赛题解
- poj3974(最长回文串)(Manacher算法)
- poj1159(回文串)
- poj3083(深搜和广搜)
- poj3278广搜
- MySQL导入.sql文件及常用命令
- poj2063
- QMutex
- DropDownList 下拉列表显示
- iOS 点击Application icon加载推送通知Data