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

【笔记】Manacher

Luogu P3805 【模板】manacher

解决问题:字符串中最长回文子串。

解决方法:求出字符串中每个字符作为回文串中心时最长回文串长度。

朴素做法,对于每个字符向后枚举比较,时间复杂度 \(O(n^2)\)

Manacher 算法提供一种优化策略,使得相同的回文串不被重复计算,时间复杂度可达 \(O(n)\)

思想:

偶数长度的回文串,其中心在两个字符之间,因此我们可以在两两字符之间插入一个标识符,使得原串中所有回文串长都是奇数,方便对每个字符进行操作;同时在边界放上未在串和标识符中出现的字符,回文串判断到边界时一定不相等,自动退出。

对于一个当前已求出的回文串,其两侧对称,则若单看该回文串中的字符,两侧每个字符作回文中心的最长回文串长也相同。所以这部分可以不用重复计算,直接赋值即可。之后再去考虑回文串外的相等情况,延伸以该字符做中心的回文串。

维护一个数组 \(len\)\(len_i\) 表示以当前字符作为回文中心的最长回文串长度,再维护两个变量 \(mid\)\(r\),表示当前右边界最靠右的回文串中心和右边界。对于一个字符,如果其在右边界内,则其作回文中心的最长回文串长至少为与其对称字符的值。然后再去往右判断,延伸其串长。延伸后用更右的边界更新 \(mid\)\(r\)

答案需要 \(-1\),因为中间有插板。

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1.1e7+10;
int n,tot=1;
int len[N*2];
char c[N],s[N*2];
int main(){scanf("%d",&n);scanf("%s",c+1);s[0]='^';s[1]='#';for(int i=1;i<=n;i++){s[++tot]=c[i];s[++tot]='#';}int mid=0,r=0,ans=0;for(int i=1;i<=tot;i++){if(i<=r) len[i]=min(len[2*mid-i],r-i+1);while(s[i-len[i]]==s[i+len[i]]) len[i]++;if(len[i]+i-1>r){r=len[i]+i-1;mid=i;}ans=max(ans,len[i]);}printf("%d\n",ans-1);return 0;
}

时间复杂度的证明:如果串长不到右边界 \(r\),则 while 循环不会执行。因此 while 循环最多执行 \(tot\) 遍,仍为线性复杂度。

http://www.jsqmd.com/news/79151/

相关文章:

  • 八上期中考游记
  • C51_74HC165并口转串口
  • application.properties
  • 智能客服机器人产品设计
  • 【题解】Luogu B4185 [中山市赛 2024/科大国创杯小学组 2023] 倍数子串/子串
  • JavaScript 异常原因(Error Cause):实现分布式系统错误链追踪的序列化与反序列化
  • 毕业论文任务书范文推荐:7大平台+AI修改工具
  • Python字典与集合:解锁高效数据处理的关键,90%的人没吃透这几点
  • 天远多头借贷行业风险版API接口调用代码流程、接入方法以及应用场景
  • 详细介绍:完整事务性能瓶颈分析案例:支付系统事务雪崩优化
  • 计算机论文选题推荐:9大AI+热门方向排名
  • JavaScript 记录(Records)与 元组(Tuples):实现堆内存中不可变复合数据结构的内存布局
  • 5 分钟快速入门 Github Actions
  • 虚函数虚表
  • 线程并发编程,同步与互斥机制
  • Python列表与元组:搞懂这3个核心差异,再也不纠结用哪个
  • MQ消息队列相关知识与对比
  • 已有析音法
  • 完整教程:PPT导出为图片的格式选择:JPG与PNG的区别
  • 不能头脑简单地搞“凡是”:凡是偶数2n(n的变域是N)必∈N
  • Docker 两大基石:Namespace 和 Cgroups
  • 告别排版困境!AI 写作到发布全自动化的完整方案
  • 9、Eclipse集成开发环境:C/C++开发全流程指南
  • 享搭提醒助手:数据变动实时预警,运营者业务状态“尽在掌握”
  • Python银行客户数据流失预测SMOTE平衡数据实现神经网络、SVM、决策树、随机森林与超参数调优|附代码数据
  • 音元系统:绪论
  • 代码随想录算法训练营第三十二天 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、卡码网57. 爬楼梯
  • 【题解】CSP-J/S 2025 补题
  • 音元系统:摘要
  • 26 avl树(下)