manacher
为了解决偶回文串的中心点非整数,在每个字符之间添加一个字符 #
。
为防止越界问题再在串的前后加上奇怪的符号。
记
此处
-
,令 。 -
-
如上图,此时
的最右端还在 内,令 即可。 -
-
此时
P3805 【模板】manacher
求最长回文串长度。
int n;char t[N],s[N<<1]; int len[N<<1]; void getstr(){ int m=0;s[m++]='@'; for(int i=1;i<=n;i++) s[m++]='#',s[m++]=t[i]; s[m++]='#',s[n=m]=0; } int manacher(){ int mx=0,id,mxlen=0; for(int i=1;i<n;i++){ if(mx>i)len[i]=min(mx-i,len[2*id-i]); else len[i]=1; while(s[i+len[i]]==s[i-len[i]])len[i]++; if(len[i]+i>mx){ mx=len[i]+i,id=i; mxlen=max(mxlen,len[i]); } } return mxlen-1; } int main(){ scanf("%s",t+1),n=strlen(t+1); getstr(); printf("%d\n",manacher()); return 0; }
P6216 回文匹配
给出长为
-
。 -
是奇回文串。 -
。
答案对
用
对于
每个回文串都是区间查,所以作二阶前缀和即可。
P5446 [THUPC2018] 绿绿和串串
定义
对于
多测。
特判
跑
时间复杂度
P9606 [CERC2019] ABB
问在串末尾添加若干字符使其成为回文串的最小数量。
对于中心点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现