https://segmentfault.com/a/1190000008484167?tdsourcetag=s_pctim_aiomsg 讲的超好!

manacher算法理解
回文串分为偶回文串和奇回文串,由于偶回文串无法找到中点,所以这里将偶回文串转换为奇回文
转换方法s="abcde"=>s="$#a#b#c#d#e#"
数组p[i],表示以i为中心的最长回文的半径,p[i]-1刚好是以i为中心的源字符串中的回文长度
从左往右扫描s,求出p数组
mx:延伸到最右边的回文的边界(不包含 )
id:mx对应的中点
现在扫到了i,i关于id对称点是j,p[j]已知,以下分三种种情况
1.i<mx:p[i]=min(p[j],mx-i),i在mx左边
2.i>=mx:p[i]=1 ,i在mx的右边
3.往两边拓展边界
求出p[i]后更新mx即可 为什么复杂度是on?
当且仅当j的边界和mx重合时,i才要向两边扩展,
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
char s[maxn],s_new[maxn];
int p[maxn];
int init(){
int len=strlen(s);
s_new[]='$',s_new[]='#';
int j=;
for(int i=;i<len;i++)
s_new[j++]=s[i],s_new[j++]='#';
s_new[j]='\0';
return j;
}
int manacher(){
int len=init();
int res=,id,mx=;
for(int i=;i<len;i++){
if(i<mx)
p[i]=min(p[*id-i],mx-i);
else
p[i]=;
//当且仅当边界处于mx的时候(两边的匹配状况未知),才会进入循环
while(s_new[i-p[i]]==s_new[i+p[i]])
p[i]++;
if(mx<i+p[i])
mx=i+p[i],id=i;
res=max(res,p[i]-);
}
return res;
} int main(){
cin>>s;
cout<<manacher();
}

poj3974

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 3000005
int p[maxn],tt;
char s[maxn],s_new[maxn];
int init(){
int len=strlen(s);
s_new[]='$',s_new[]='#';int j=;
for(int i=;i<len;i++)
s_new[j++]=s[i],s_new[j++]='#';
s_new[j]=;
return j;
}
int manacher(){
int len=init();
int mx=,id,res=;
for(int i=;i<len;i++){
if(i<mx)p[i]=min(p[*id-i],mx-i);
else p[i]=;
while(s_new[i+p[i]]==s_new[i-p[i]])p[i]++;
if(i+p[i]>mx)
mx=i+p[i],id=i;
res=max(res,p[i]-);
}
return res;
}
int main(){
while(scanf("%s",s)){
if(s[]=='E')break;
memset(p,,sizeof p);
printf("Case %d: %d\n",++tt,manacher());
}
}

马拉车算法——poj3974的更多相关文章

  1. Manacher's Algorithm 马拉车算法

    这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...

  2. 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  3. 小白月赛13 B小A的回文串 (马拉车算法求最长回文子串)

    链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  4. BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1123  Solved: 408 题目连接 http://w ...

  5. 2015 UESTC 搜索专题M题 Palindromic String 马拉车算法

    Palindromic String Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/s ...

  6. 647. Palindromic Substrings(马拉车算法)

    问题 求一个字符串有多少个回文子串 Input: "abc" Output: 3 Input: "aaa" Output: 6 思路和代码(1)--朴素做法 用 ...

  7. Manacher's Algorithm 马拉车算法(最长回文串)

    这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...

  8. 马拉车算法(Manacher's Algorithm)

    这是悦乐书的第343次更新,第367篇原创 Manacher's Algorithm,中文名叫马拉车算法,是一位名叫Manacher的人在1975年提出的一种算法,解决的问题是求最长回文子串,神奇之处 ...

  9. HDU - 3068 最长回文manacher马拉车算法

    # a # b # b # a # 当我们遇到回判断最长回文字符串问题的时候,若果用暴力的方法来做,就是在字符串中间添加 #,然后遍历每一个字符,找到最长的回文字符串.那么马拉车算法就是在这个基础上进 ...

随机推荐

  1. Leetcode 4.28 string

    1. 38. Count and Say 就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的string里.数量+字符 class Solution { public String coun ...

  2. Mongo集群Java连接时UnknownHostException错误

    今天在 Java 连接 Mongo 集群时报了一个超时的错误,但是在本地客户端连接单节点的时候却能连上,具体报的错误如下: Caused by: com.mongodb.MongoTimeoutExc ...

  3. 【CSA35G】【XSY3318】Counting Quests DP 拉格朗日反演 NTT

    题目大意 zjt 是个神仙. 一天,zjt 正在和 yww 玩猜数游戏. zjt 先想一个 \([1,n]\) 之间的整数 \(x\),然后 yww 开始向他问问题. yww 每次给 zjt 一个区间 ...

  4. Linux lvs-DR模式配置详解

    本篇文档主要是记录DR模式实现过程,以及各配置步骤的原理.“lvs三种模式工作原理”中描述了LVS的NAT.DR.TUN三种模式的工作原理. DR模式是通过director将报文源和目标MAC地址修改 ...

  5. git学习02 - log查看&版本回退

    1.查看更新记录 git log /  git log --pretty=oneline D:\learn\git_test>git log commit a915e7b12076673d778 ...

  6. zabbix3.2监控mysql主从(复制)状态

    问题背景: MySQL主从架构最常见不过了,在生产环境下,主从关系的状态的重要性不言而喻,这里小记一下通过zabbix监控主从状态,并用微信告警测试. 测试环境: 软件 MySQL-master My ...

  7. 微信公众、QQ群、知识星球(附比特币链接)

    文章一般都会在公众号抢先预览,一个系列出差不多的时候一般博客园汇总一下(文章很长) 微信公众号:逸鹏说道(dotnetcrazy) 群友刚创建的Python中级群,有一定Python基础的可以共同探讨 ...

  8. 互联网+ 何人能挡?带着你的Code飞奔吧!

    Python方向: 早期方向 Web全栈 擅长专栏 爬虫系列 数据分析 人工智能 物联网系(lot万物互联)[逆天很看好未来的前景] 自动化运维(安全与测试) 其他系列 游戏开发(最近很火) 导航栏: ...

  9. python中的sequence(序列)

    摘要 这篇文章主要是为了让自己记住字典不是序列,python中序列的类型 序列化的定义 有个朋友问我,什么是序列化,我瞬间懵了,然后查了一下,发现廖雪峰老师给出了一个很舒服的解释: 序列化:我们把变量 ...

  10. 《Exception团队》第一次作业:团队亮相

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 深入了解软件思想,强化编程技术 二.正文 1. ...