pat L2-008 复习manacher
2024-09-05 10:21:05
马上要去比赛了 复习一下最长回文串的长度。
算法的实现两个步骤;
1. 一个是对原串的处理,在所有的空隙位置(包括首尾)插入同样的符号,要求这个符号是不会在原串中出现的。这样会使得所有的串都是奇数长度的。
2.用p数组记录以i为中心的回文段的半径 实际的长度是p的值-1。然后就是对p数组的求解 两种大情况 三种小情况 这个就不多说了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int p[1001*2+2];
string s;
getline(cin,s);
string temp;
temp+="$#";//!!!! 前面的符号一开始加的是@ wa一万次, 气死老子,
for(int i=0;i<s.length();i++)// 插入'#'定向处理
{
temp+=s[i];
temp+='#';
}
s+='\0';//这个细节也要注意/
int maxlen=0,id=0;
memset(p,0,sizeof(p));
for(int i=2;i<temp.size();i++)
{
int k=i-id;
if(id+p[id]>i) p[i]=min(p[id-k],p[id]-k);// 这里用id+p[id]表示当前最大回文的边界 具体怎么
else p[i]=1;
while(temp[i-p[i]]==temp[i+p[i]]) p[i]++;
if(i+p[i]>id+p[id]) id=i;
if(maxlen<p[i]) maxlen=p[i];// 这里maxnlen 记录的就是最大的长度
}
cout<<maxlen-1<<endl;
return 0;
}
最新文章
- 关于OpenGL的性能方面的技巧(不时更新)
- IEnumerable接口的Aggregate方法
- centOS设置zookeeper开机自动启动
- PHP自动生成后台导航网址的最佳方法
- IOS单例模式(Singleton)
- php 和 apache的关系
- Linux批量重命名
- ListBox之类控件的Item项显示对象的两个属性
- 微信小程序之最简单的Demo设计使用
- ACCA AI来袭会议笔记
- Django-6 Django ORM层
- 报表工具-ECharts 特性介绍
- 使用Gadget 做usb鼠标键盘设备
- 简单说明CGI和动态请求是什么
- BZOJ.3631.[JLOI2014]松鼠的新家(树上差分)
- openjdk for window
- 2017-2018-2 20165327 实验四《Android程序设计》实验报告
- bootstrap基础学习小记(二)排版、列表、代码风格、表格
- 使用GitHub-Pages创建博客和图片上传问题解决
- 每日英语:The Upside of Favoritism