首页 > 其他分享 >Manacher学习笔记

Manacher学习笔记

时间:2024-06-22 16:13:05浏览次数:10  
标签:字符 Manacher texttt 样例 mid 笔记 学习 mr 回文

1. 用途

给定一个串,求该串中最长回文子串的长度

2. 算法过程

2.1. 预处理

回文串分为两类,奇回文和偶回文,所以对称中点是不确定的,可能是字符也可能是两个字符之间的空隙

所以可以在任意两个字符和开头结尾加上同一个奇怪的字符,此时的回文中心就一定是一个字符

2.2. 算法主体

定义数组p[i]表示以i为回文中心的最长回文半径,不难发现,p[i]-1就是最长的长度,因为要除去一个多余的字符

显然,可以向外扩展,暴力去跑有多少点符合条件,时间复杂度\(O(n^2)\)

但是在这种情况下,很多子串被重复访问,导致很多无意义的运算,时间复杂度很高

考虑优化,定义mr表示经过的,最靠右的点,而mid表示这个点是由哪个对称中心转移的

显然,对于每一个i,其实并没有必要都去拓展,可以分为如下情况:

  1. \(i<mr\)

因为\([mid-p_{mid},mr]\)是回文的,记i关于mid的对称点为j

根据对称的性质,显然存在,\([j-p_j,j+p_j]=[i-p_i,i+p_i]\)

但是,当\(i+p_i\)大于\(mr\)时,就不一定满足条件了,所以可以在\(i+p_j\)和\(mr\)中去一个min值,再暴力扩展

  1. \(i\ge mr\)

因为已经不存在对称,所以直接暴力即可

因为mid和mr都是不断右移,所以时间复杂度线性

2.3. 例题

P3805 【模板】manacher

https://gxyzoj.com/d/gxyznoi/p/112

题目描述

给出一个只由小写英文字符 \(\texttt a,\texttt b,\texttt c,\ldots\texttt y,\texttt z\) 组成的字符串 \(S\) ,求 \(S\) 中最长回文串的长度 。

字符串长度为 \(n\)。

输入格式

一行小写英文字符 \(\texttt a,\texttt b,\texttt c,\cdots,\texttt y,\texttt z\) 组成的字符串 \(S\)。

输出格式

一个整数表示答案。

样例 #1

样例输入 #1

aaa

样例输出 #1

3

提示

\(1\le n\le 1.1\times 10^7\)。

标签:字符,Manacher,texttt,样例,mid,笔记,学习,mr,回文
From: https://www.cnblogs.com/wangsiqi2010916/p/18262429

相关文章

  • 【抽代复习笔记】21-群(十五):循环群引理及定义
    例4:证明,如果σ=(i1i2…ik)是Sn中的一个k-循环,而r∈Sn,则rσr^(-1)也是一个k-循环,且rσr^(-1)=(r(i1),r(i2),…,r(ik))。证:①设σ=(i1i2…ik)=(i1ik)(i1ik-1)…(i1i2),则rσr^(-1)=r(i1i2…ik)r^(-1)=r(i1ik)(i1ik-1)…(i1i2)r^(-1)=r(i1ik)[r^(-1)r](i1ik-1)[......
  • 参考Python官网学习Python
    参考Python官网学习PythonPython教程—Python3.12.4文档Python:Python解释器易于扩展,使用C或C++(或其他C能调用的语言)即可为Python扩展新功能和数据类型。Python也可用作定制软件中的扩展程序语言。-------------------------------------------------------------......
  • ch13 半监督学习
    未标记样本在生产活动中,有样本的数目会很少(因为标记很昂贵),从LLM的成功来看,在unlabeleddata上训练模型是很有希望的。这种方法被称为半监督学习。半监督学习又分为纯半监督学习和直推学习纯半监督学习强调从unlabeleddata中学习出一个好的模型直推学习强调从labeled......
  • Markdown学习
    Markdown学习标题一级标题一个#后加标题名二级标题两个##后加标题名三级标题三个###后加标题名以此类推最多六级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说Java,走向人生巅峰分割线图片超链接点击跳转到百度列表A......
  • 前端网页开发学习(HTML+CSS+JS)有这一篇就够!
    目录HTML教程▐ 概述▐ 基础语法▐ 文本标签▐ 列表标签 ▐ 表格标签▐ 表单标签CSS教程▐概述▐基础语法▐选择器▐修饰文本▐修饰背景▐透明度▐伪类▐盒子模型▐ 浮动▐ 定位JavaScript教程▐概述▐ 基础语法▐函数▐事件▐......
  • 【自学】从零开始学习数据结构--1.数据结构绪论
     本系列只用于我自己自学总结做出来的笔记,具有一定的参考性,但不多。凑合看吧。数据:数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。例如图片,音频这样的。数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为整体......
  • 树的序列化笔记
    \(dfs\)序以\(DFS\)(先根遍历)⾸次访问顺序将节点重新排列。特征:每个顶点在序列中出现恰好⼀次(废话)⽗节点排在⼦节点前⾯(废话)每棵⼦树都占据序列的⼀个区间欧拉序记录\(DFS\)递归/回溯时依次经过的所有点。特征:每个点出现次数=度数(根多1次)相邻点深度差1\(LCA(x,y)=\)......
  • 数据挖掘——机器学习算法应用
    1. 朴素贝叶斯分类器数据UniversalBank是一家业绩快速增长的银行。为了增加贷款业务,该银行探索将储蓄客户转变成个人贷款客户的方式。银行收集了5000条客户数据,包括客户特征(age、experience、income、family、CCAvg、education、ZipCode)、客户对上一次贷款营销活动的响......
  • Hive笔记-4
    240618-Hive笔记-44.2Insert4.2.1将查询结果插入表中1)语法INSERT (INTO |OVERWRITE)TABLE tablename[PARTITION (partcol1=val1,partcol2=val2...)]select_stamement;关键字说明:(1)INTO:将结果追加到目标表(2)OVERWRITE:用结果覆盖原有数据2)案例......
  • 【深度学习】python之人工智能应用篇——图像生成技术(二)
    说明:两篇文章根据应用场景代码示例区分,其他内容相同。图像生成技术(一):包含游戏角色项目实例代码、图像编辑和修复任务的示例代码和图像分类的Python代码示例图像生成技术(二):包含简化伪代码示例、使用GAN生成医学图像代码示例和使用GAN生成产品展示图代码示例图像生成是......