Manacher算法教程:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824

模板题,Code 附带注释:
 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char b[],a[];
char tmp[];
int n,f[],zu;//f[i]表示插入一堆#后,以i为中心的最长回文子串の半径长度,
//故其减1后就是原串的最长回文子串的答案
//也是原串中以i为开端的最长回文串の长度。
int id,maxid,ans;
int main()
{
while()
{
scanf("%s",tmp);
if(tmp[]=='E')
break;
zu++;
n=strlen(tmp);
memset(b,,sizeof(b));
memset(a,,sizeof(a));
memset(f,,sizeof(f));
ans=id=maxid=;
for(int i=;i<=n;i++)
b[i]=tmp[i-];
a[]='#';
for(int i=;i<=n;i++)
{
a[i<<]=b[i];
a[i<<|]='#';
}
a[]='-';
a[(n+)<<]='+';
n=n<<|;
f[]=;
id=;//用id这个变量记下取得这个最优maxid时的id值
//即右端扩展到maxid+1时,该回文串中心的位置
maxid=;//maxid是曾经扫描到的回文串中,匹配到的最远的位置+1
for(int i=;i<=n;i++)
{
if(maxid>i)//算法核心:防止重复匹配
f[i]=min(f[(id<<)-i]//以 关于id的对称点 为中心的的最长回文串长
//因为,分别在id两侧的两半回文串是完全一样的
,maxid-i // 但是,以id的对称点为中心的最长回文串有可能超出
//以id为中心的最长回文串的范围,所以,限制其无法超出
//此范围
); //(id<<1)-i 为 i 关于 id 的对称点
else
f[i]=;//否则f[i]=1
for(;a[i+f[i]]==a[i-f[i]];f[i]++);
ans=max(ans,f[i]-);
if(f[i]+i>maxid)//注意是f[i]+i,不是f[i]+i-1,因为maxid是匹配到的最远位置+1
{
maxid=f[i]+i;
id=i;//若以i为中心时,回文串可以扩展到更远的地方,更新id
}
}
printf("Case %d: %d\n",zu,ans);
} return ;
}

【Manacher算法】poj3974 Palindrome的更多相关文章

  1. Palindrome(poj3974)(manacher算法)

    http://poj.org/problem?id=3974 Palindrome Time Limit: 15000MSMemory Limit: 65536K Total Submissions: ...

  2. POJ3974 Palindrome (manacher算法)

    题目大意就是说在给定的字符串里找出一个长度最大的回文子串. 才开始接触到manacher,不过这个算法的确很强大,这里转载了一篇有关manacher算法的讲解,可以去看看:地址 神器: #includ ...

  3. Palindrome(最长回文串manacher算法)O(n)

     Palindrome Time Limit:15000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  4. Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp

    题目链接: http://codeforces.com/problemset/problem/7/D D. Palindrome Degree time limit per test1 secondm ...

  5. 利用Manacher算法寻找字符串中的最长回文序列(palindrome)

    寻找字符串中的最长回文序列和所有回文序列(正向和反向一样的序列,如aba,abba等)算是挺早以前提出的算法问题了,最近再刷Leetcode算法题的时候遇到了一个(题目),所以就顺便写下. 如果用正反 ...

  6. POJ 3974 Palindrome 字符串 Manacher算法

    http://poj.org/problem?id=3974 模板题,Manacher算法主要利用了已匹配回文串的对称性,对前面已匹配的回文串进行利用,使时间复杂度从O(n^2)变为O(n). htt ...

  7. POJ3974 Palindrome Manacher 最长回文子串模板

    这道题可以$O(nlogn)$,当然也可以$O(n)$做啦$qwq$ $O(nlogn)$的思路是枚举每个回文中心,通过哈希预处理出前缀和后缀哈希值备用,然后二分回文串的长度,具体的就是判断在长度范围 ...

  8. POJ----(3974 )Palindrome [最长回文串]

    Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 5121   Accepted: 1834 Description Andy ...

  9. hdu 3068 最长回文 manacher算法(视频)

    感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接:戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大. manacher算法把所有的回文都变 ...

随机推荐

  1. Vue 键盘事件

    Vue2键盘事件:keydown/keyup... 1.使用 <!DOCTYPE html> <html> <head> <title></tit ...

  2. 打开Android系统安装APK的页面

    //使用隐式意图开启安装APK的Activity Intent intent = new Intent("android.intent.action.VIEW"); intent. ...

  3. LCD实验学习笔记(十):TFT LCD

    硬件组成: REGBANK是LCD控制寄存器组,含17个寄存器及一块256*16的调色板,用来设置参数. LCDCDMA中有两个FIFO,当FIFO空或数据减少到阈值,自动发起DMA传输,从内存获取图 ...

  4. [NOIP2011]刷水

    前几天做了NOIP2011的题,感觉不是那么难. 这边先做了两天的前两题,T3还没打. D1T1:顺次读入,分别判断是否覆盖即可,照例大水: #include<cstdio> ],b[], ...

  5. win10远程桌面配置

    Win10连接远程桌面的时候提示您的凭证不工作该怎么办? http://www.cnblogs.com/zhuimengle/p/6048128.html 二.服务器端 1.依旧进入组策略,不过是在服 ...

  6. Linux内核通知链分析【转】

    转自:http://www.cnblogs.com/jason-lu/articles/2807758.html Linux内核通知链分析 1. 引言 Linux是单内核架构(monolithic k ...

  7. 【bzoj4765】普通计算姬

    一道奇奇怪怪的数据结构题? 把树线性化,然后分块维护吧. 为了加速,求和用树状数组维护每个块的值. #include<bits/stdc++.h> #define N 100010 #de ...

  8. Iptables基础整理

    Iptables基础框架

  9. MiCode108 猜数字

    Description 相传,十八世纪的数学家喜欢玩一种猜数字的小游戏,规则如下: 首先裁判选定一个正整数数字 N (2 \leq N \leq 200)N(2≤N≤200),然后选择两个不同的整数X ...

  10. resteasy json

    https://www.cnblogs.com/toSeeMyDream/p/5763725.html