manacher(马拉车)
P3805 【模板】manacher
题目描述
给出一个只由小写英文字符
字符串长度为
输入格式
一行小写英文字符
输出格式
一个整数表示答案。
输入输出样例 #1
输入 #1
aaa
输出 #1
3
说明/提示
manacher的思想和z函数的加速盒子的思想是一样的,难点就是i的对称点的位置,i关与对称点的位置,就是i与r的差加上l,还有一点就是结果等于最长回文子串的长度减一
#include<iostream>
#include<string>
using namespace std;
const int N=3*1e7+5;
char s[N];
int d[N];
int main(){
string t;
cin>>t;
int k=0;
s[++k]='@',s[++k]='#';
for(int i=0;i<t.size();i++){
s[++k]=t[i];
s[++k]='#';
}
d[1]=1;
for(int i=2,l,r=1;i<=k;i++){
if(i<=r)d[i]=min(d[r-i+l],r-i+1);
while(s[i-d[i]]==s[i+d[i]])d[i]++;
if(i+d[i]-1>r)l=i-d[i]+1,r=i+d[i]-1;
}
int Max=-1;
for(int i=1;i<=k;i++)Max=max(Max,d[i]);
cout<<Max-1;
return 0;
}
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 突发,CSDN 崩了!程序员们开始慌了?
· 完成微博外链备案,微博中直接可以打开园子的链接
· C# WinForms 实现打印监听组件
· 推荐 3 种 .NET Windows 桌面应用程序自动更新解决方案
· 一个基于 .NET 开源、模块化 AI 图像生成 Web 用户界面