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

浅谈马拉车

浅谈马拉车

马拉车其实挺好理解的,写篇博客以便复习。

正题

简介

Manacher主要的思想是回文串的对称性,即

  • 在一个大回文串中,一定存在一个与\(X\)关于回文对称中心对称的子串\(Y\),故我们利用已知的回文串搞事情.

算法流程


  1. 考虑回文串有ABA(对称中心为一个字符)和ABBA(对称中心为两个字符)两种情况,则每个字符间加一个特殊字符,成为|A|B|A||A|B|B|A|两种情况,此时都转成了对称中心为一个字符的情况.

  2. 考虑记录一个\(p\)数组,\(p[i]\)表示以\(i\)为对称中心能向外拓展的最大的回文串的半径长度.

  3. 从左到右遍历字符串\(s\) , 过程中维护一个变量\(r\),表示当前已知的回文串中右端点最靠右的右端点的下标,维护一个变量\(mid\),表示右端点最靠右的回文串的对称中心的下标.

  4. 枚举\(i\),若\(i\le r\),则考虑与\(i\)关于\(mid\)的对称点\(j = mid*2-i\) , 我们就已经找到一个现成的回文串,即\([j-p[j]+1,j+p[j]-1]\),需要注意的是,若\(p[j] > r-i+1\),则长度大于\(r-i+1\)的部分是不回文的,故\(p[i] = min(p[j],r-i+1)\).

  5. 考虑拓展回文,尝试更新\(r\)\(mid\)


时间复杂度分析

  • \(p[j] < r-i+1\) , 则已经证明了第三步的拓展是不可能成功的,即\(p[i]\)就不会耗费时间拓展.
  • 否则,考虑若向外拓展成功,每拓展一次\(r\)便会增加一,考虑\(r\)最多只会到\(n\),故时间复杂度为\(O(n)\).

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1.1e7+15;
int p[N<<1];
char a[N*2];
int read(){int tot;char ch = getchar();a[0]='@',a[tot=1]='|';//考虑在0处添加一个@,避免端点拓展时越界while(ch<'a'&&'z'<ch)  ch = getchar();while('a'<=ch&&ch<='z') a[++tot] = ch , a[++tot] = '|' , ch = getchar();return tot;
}
int main(){int n = read();int ans = 0;for(int i = 1 , mid = 0 , r = 0 ; i<=n ; i++){if(i<=r) p[i] = min(p[(mid<<1)-i],r-i+1);while(a[i-p[i]]==a[i+p[i]]) ++p[i];if(i+p[i]-1>r) r = i+p[i]-1 , mid = i;ans = max(ans,p[i]);}cout<<ans-1;return 0;
}
http://www.wxhsa.cn/company.asp?id=2730

相关文章:

  • 十七、异常和中断响应过程的时序图
  • 十六、异常和中断的响应过程
  • 直播平台搭建,浏览器中的事件循环与Node中的事件循环 - 云豹科技
  • Redisson 分布式锁的实现原理 - 教程
  • 关于前端的一些疑问整理(标签属性值和符号)
  • 深入解析:免费的SSL和付费SSL 证书差异
  • 领嵌iLeadE-588网关AI边缘计算盒子智能安防监控
  • 十五、异常和中断事件的初始检测、识别和处理
  • 十四、异常和中断的分类
  • 思考 | 躺平者的本质和区别
  • ros2--service/服务--接口 - 教程
  • c++
  • LayerMask的使用规范
  • 存在,是终极的神奇。ECT-OS-JiuHuaShan 框架正是这份神奇的自我觉醒、自我阐述与自我捍卫
  • 深入解析:【Unity基础】枚举AudioType各个枚举项对应的音频文件类型
  • 十三、异常和中断的基本概念
  • 【关注可白嫖源码】25046基于SpringBoot的少儿编程管理系统设计与达成
  • 2024-2025第二学期计算机网络助教工作总结
  • 信息搜集、物联网搜索引擎、ARL灯塔系统、Nmap
  • 工具链部署实用技巧 7|模型设计帧率推理时耗时与带宽分析
  • 基于Django的“社区爱心养老管理系统”设计与开发(源码+数据库+文档+PPT) - 实践
  • 关于导出bangumi.tv用户收藏/观看数据
  • ECT-OS-JiuHuaShan框架元推理,为何超乎想象,难以置信?
  • 实用指南:Excel转图片excel2img库bug修复:AttributeError ‘parent‘ 问题解决方案
  • ECT-OS-JiuHuaShan框架元推理,其运行与推理,是自指自洽性的唯一证明
  • 数据结构与算法-32.图-加权无向图最小生成树
  • 找到字符串中所有字母异位词-leetcode
  • 配置gemini
  • 基于chrony的NTP校时配置方法
  • windows能过注册表修改c盘默认目录