Manacher 最长回文子串

devtools/2025/2/3 4:17:05/

方法:求字符串的


#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e6+9;
char s[N];
int p[N];int main()
{cin>>s+1;int n=strlen(s+1);s[0]='^';s[2*n+2]='$'; for(int i=2*n+1;i>=1;i--){s[i]=(i&1)?'#':s[i>>1];//右移表示除2 }int C=0,R=0;//C表示最长回文串的中心 //R表示最长回文串的回文半径for(int i=1;i<=2*n+1;i++){//半径初始化 p[i]=(i<R)?min(p[2*C-i],C-i):1;//暴力搜索while(s[i+p[i]]==s[i-p[i]])p[i]++;if(i+p[i]>R)C=i,R=i+p[i]; } int ans=0;for(int i=1;i<=2*n+1;i++) ans=max(ans,p[i]-1);cout<<ans<<endl;return 0;
} 


转换之后的回文半径和转换之前的回文串长度的关系

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e6+9;
char s[N];
int p[N];int main()
{cin>>s+1;int n=strlen(s+1);s[0]='^';s[2*n+2]='$';//设置开头和结尾的哨兵for(int i=2*n+1;i>=1;i--){s[i]=(i&1)?'#':s[i>>1];//在原字符串中插入'#'号}int C=0,R=0;//C表示最长回文子串的中心位置,R表示当前for(int i=1;i<=2*n+1;i++){p[i]=i<R?min(R-i,p[2*C-i]):1;//判断i是否在盒子里//在的话就取对称半径和当前点到边界的最小值//不在的话就将半径设置为1while(s[i+p[i]]==s[i-p[i]])p[i]++;//然后开始暴力搜索,结果是当前点的最大回文半径if(i+p[i]>R) C=i,R=i+p[i];
//如果当前点的最大回文半径是最大的则更新为最大回文半径,
// 当前点更新为新的中心}int ans=0;for(int i=1;i<=2*n+1;i++){ans=max(ans,p[i]-1);}// 转换之后最长回文半径-1 = 转换之前最长回文子串的长度。cout<<ans<<endl;return 0;
}

最长回文子串


http://www.ppmy.cn/devtools/155624.html

相关文章

衡水市城区小区地图)矢量高清cdr|pdf大图内容测评

&#xff08;衡水市城区小区地图&#xff09;矢量高清cdr|pdf大图&#xff0c;cdr。ai软件打开另保存cdr&#xff0c;ai格式就可以&#xff0c;看样图

【Leetcode 每日一题】81. 搜索旋转排序数组 II

问题背景 已知存在一个按非降序排列的整数数组 n u m s nums nums&#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c; n u m s nums nums 在预先未知的某个下标 k ( 0 < k < n u m s . l e n g t h ) k\ (0 < k < nums.length) k (0<k<…

vue2和vue3路由封装及区别

Vue 2 和 Vue 3 在路由封装方面有一些区别&#xff0c;主要体现在 Vue Router 版本的升级&#xff08;Vue Router 3 -> Vue Router 4&#xff09;上。下面我们来对比一下 Vue 2 和 Vue 3 在路由封装上的主要区别&#xff0c;并提供相应的代码示例。 1. Vue 2 路由封装&#…

【Samba】Ubuntu20.04 Windows 共享文件夹

【Samba】Ubuntu20.04 Windows 共享文件夹 前言整体思路检查 Ubuntu 端 和 Windows 网络通信是否正常创建共享文件夹安装并配置 Samba 服务器安装 Samba 服务器创建 Samba 用户编辑 Samba 配置文件重启 Samba 服务器 在 Windows 端 访问 Ubuntu 的共享文件夹 前言 本文基于 Ub…

Kotlin 委托详解

Kotlin 委托详解 引言 Kotlin 作为一种现代化的编程语言&#xff0c;在 Android 开发等领域得到了广泛的应用。在 Kotlin 中&#xff0c;委托&#xff08;Delegation&#xff09;是一种强大的特性&#xff0c;它可以让我们以更简洁的方式实现代码的复用和扩展。本文将详细解析…

Conditional DETR for Fast Training Convergence论文学习

1. 写作背景 最近提出的 DETR 成功地将 transformer 引入到物体检测任务中&#xff0c;获得了很不错的性能。DETR 的重要意义在于去除了物体检测算法里需要人工设计的部分&#xff0c;比如 anchor 的生成和 NMS 操作。这大大简化了物体检测的设计流程。基本的结构还是沿用了以…

Angular 2 表单深度解析

Angular 2 表单深度解析 引言 Angular 2作为现代前端开发的框架之一,以其灵活性和强大的功能赢得了众多开发者的青睐。在Angular 2中,表单处理是其中一个重要且复杂的部分。本文将深入解析Angular 2的表单,从基础知识到高级应用,旨在帮助开发者更好地理解和运用Angular 2…

电力晶体管(GTR)全控性器件

电力晶体管&#xff08;Giant Transistor&#xff0c;GTR&#xff09;是一种全控性器件&#xff0c;以下是关于它的详细介绍&#xff1a;&#xff08;模电普通晶体管三极管进行对比学习&#xff09; 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管&#xff08;BJT&am…