manacher
用于在字符串中寻找最长回文子串的高效算法
Manacher 算法的核心思想是利用已经计算出的回文子串的信息来加速后续的计算。它通过在原始字符串的每个字符之间插入一个特殊字符(通常用#),将奇数长度和偶数长度的回文子串统一处理,使得每个回文子串都以一个字符为中心对称。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
string a, s;
int r[N];
int intt() //中间加入“#”以便判断偶数回文串
{
s[0]='$';
s[1]='#';
int l=a.size();
int k=1;
for(int i=0;i<l;i++)
{
s[++k]=a[i];
s[++k]='#';
}
s[++k]=' ';
return k;
}
void manacher()
{
int n=intt();
int p=1,mx=1;
for(int i=1;i<=n;i++)
{
if(i<mx) r[i]=min(mx-i,r[p*2-i]);
else r[i]=1;
while(s[i+r[i]]==s[i-r[i]])
r[i]++;
if(i+r[i]>mx)
p=i,mx=i+r[i];
}
}
int main()
{
cin>>a;
manacher();
return 0;
}
本文来自博客园,作者:流氓兔LMT,转载请注明原文链接:https://www.cnblogs.com/-include-lmt/p/18741811
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】