Manacher算法较传统算法的优化之处在于它对每个回文中心寻找回文半径的时候并不是都从半径为1开始找的,而是利用前面已经完成的任务,寻找一个初始的开始搜索的半径大小,复杂度是线性的。

参考博客:https://www.cnblogs.com/z360/p/6375514.html

下面附上hdoj的3068模板:

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define inf 0x3f3f3f3f
#define maxn 110005
int n,m,t;
char s[maxn];
char tmp[maxn<<];
int l[maxn<<];//转换后的字符串以及最大回文半径
int manacher(char *st,int len)
{
int t=;
tmp[t++]='$';
tmp[t++]='#';
f(i,,len-)
{
tmp[t++]=s[i];
tmp[t++]='#';
}
tmp[t]=;
int mr=,ans=,pos=;//最长回文右端、最长回文长度以及回文中心
f(i,,t-)
{
l[i]=mr>i?min(mr-i,l[*pos-i]):;
//i>=mr时需要以i为新的回文中心开始搜索回文长度
while(tmp[i-l[i]]==tmp[i+l[i]])l[i]++;
if(i+l[i]>mr)//更新最大回文右端点
{
mr=i+l[i];
pos=i;
}
ans=max(ans,l[i]);
}
return ans-;//每次回文串长度为2*k+1时,多余字符为k+1个,有k个属于原串的字符
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
pf("%d\n",manacher(tmp,len));
} }

最新文章

  1. sql语句,怎么取查询结果的位置
  2. JSPatch 中 defineClass 中覆盖方法的使用
  3. 记录s标签范例
  4. parameter和argument的区别
  5. 在ubuntu 10.04下编译ffmpeg
  6. android 在布局中动态添加控件
  7. 第四篇、Tomcat 集群
  8. (step4.3.1) hdu 1010(Tempter of the Bone——DFS)
  9. oracle ebs 12.20 安装成功其过程失败日记及总结(1)
  10. 如何实现MySQL随机查询数据与MySQL随机更新数据?
  11. java war 打包、解压命令
  12. -linux删除大量文件----rm,rsync
  13. 基于python的知乎开源爬虫 zhihu_oauth使用介绍
  14. Android ble蓝牙问题
  15. 记录一次配置golang服务器端口
  16. AHB总线协议
  17. sql注入总结(一)--2018自我整理
  18. oracle sql 添加、修改数据库操作方式
  19. 深入php内核,从底层c语言剖析php实现原理
  20. git报错:Pull is not possible because you have unmerged files解决方法

热门文章

  1. 多方论战!市场到底看重VR哪些特质
  2. 招聘,api、app、web自动化,性能,持续集成,其他
  3. C++与引用1
  4. C++走向远洋——45(警察和厨师、UML)
  5. Centos 7 安装Mysql8 主从同步复制
  6. SpringBoot2整合Redis缓存
  7. 一起了解 .Net Foundation 项目 No.13
  8. 怎么用Python写一个三体的气候模拟程序
  9. node--静态文件托管,路由,模板引擎
  10. JS面试准备二