当前位置: 首页 > news >正文

线性复杂度找回文串?Manacher马拉车----字符串算法

Manacher

O(n)O(n)O(n) 求最长回文串。

回文串分奇数串和偶数串,我们在字符前后加入‘#’,都转化为奇数串,方便处理。如 acaacaaca 转化为 XaXcXaXXaXcXaXXaXcXaX
pip_ipi 表示以 iii 为对称轴,能扩展的最长长度。设当前扩展到的最右端为 mxmxmx,扩展到 mxmxmx 的对称轴是id。
我们依次往后看,若当前看到的位置为 iii ,若 i≤mxi\leq mximx,那 iii 关于 ididid 对称的 jjj,他们两个是对称全等的。
此时有两种情况,iii 完全用 jjj 的回文串,此时要求 j−p[j]j-p[j]jp[j] 不超过以 ididid 为中心的左端点。若超过,答案则为 mx−imx-imxi (因为 p[j]p[j]p[j] 那里要是超了 mxmxmx,肯定只能取到这个 mxmxmx 的位置啦)。
在这里插入图片描述
若在边界上或是≥mx\geq mxmx ,则可以继续扩展,暴力扩展即可。
在这里插入图片描述

因为每次暴力扩展都是线性向右的,所以复杂度为线性的。

#include<bits/stdc++.h>
using namespace std;
const int N=22000000+20;
string a,s;
int len;
int p[N];
int main(){cin>>s;for(int i=0;i<s.size();++i){a+='#';a+=s[i];}	a+='#';len=a.size();int mx=0,id=0;int ans=0;for(int i=0;i<len;++i){if(i<mx) p[i]=min(p[2*id-i],mx-i+1);else p[i]=1;while(i-p[i]>=0&&i+p[i]<len&&a[i-p[i]]==a[i+p[i]]) p[i]++; //暴力扩展if(p[i]+i>mx) mx=p[i]+i-1,id=i;ans=max(ans,p[i]-1);}printf("%d\n",ans);return 0;
}
http://www.dtcms.com/a/407227.html

相关文章:

  • 品牌服装网站源码做一个网站需要多久
  • 网站描述怎样写微信静首页制作代码
  • JavaScript--基础ES(一)
  • 滚柱直线导轨精度、寿命与成本能否实现三重标准?
  • 室内设计资源网搜外网 seo教程
  • wordpress 移动站如何做网站的图片滑动块
  • 实现当前登录在线人数统计
  • Centos7.9 单机安装OceanBase 社区版
  • 【STM32】USART串口(下)
  • AI 原生应用:重构内容创作的 “智能工厂” 革命
  • 桐乡住房和城乡规划建设局网站i深圳网站建设
  • 安装Neo4j5.26.12社区版本(2025年)
  • Python项目--交互式VR教育应用开发
  • 使用Comate全栈开发一个Python学习网站
  • 网站推广软件工具百度竞价被换着ip点击
  • 前端老旧项目全面性能优化指南与面试攻略
  • 破局与进化:火山引擎Data Agent从落地实践到架构未来
  • 网站不用工具开发建设易语言怎么做ifa网站填表
  • 云手机出现的意义都有哪些
  • 网站 设计 文档wordpress 打开速度
  • Python 基于 MinIO 的文件上传服务与图像处理核心实践
  • 余姚网站开发什么是手机网站
  • 9.25 深度学习7
  • 成都网站制作成都网站维护
  • 上传的网站打不开网站建设公司有哪些原
  • 【论文阅读】纯视觉语言动作(VLA)模型:全面综述
  • python做网站的优势网络营销推广方法ppt
  • 未来工厂构建蓝图:从IT/OT割裂到数据驱动的实践全解析
  • wamp:phpmyadmin访问被拒
  • 一级a做爰电影免费观看网站wordpress 评论邮箱改成电话