马上要去比赛了 复习一下最长回文串的长度。

算法的实现两个步骤;

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;
}

最新文章

  1. 关于OpenGL的性能方面的技巧(不时更新)
  2. IEnumerable接口的Aggregate方法
  3. centOS设置zookeeper开机自动启动
  4. PHP自动生成后台导航网址的最佳方法
  5. IOS单例模式(Singleton)
  6. php 和 apache的关系
  7. Linux批量重命名
  8. ListBox之类控件的Item项显示对象的两个属性
  9. 微信小程序之最简单的Demo设计使用
  10. ACCA AI来袭会议笔记
  11. Django-6 Django ORM层
  12. 报表工具-ECharts 特性介绍
  13. 使用Gadget 做usb鼠标键盘设备
  14. 简单说明CGI和动态请求是什么
  15. BZOJ.3631.[JLOI2014]松鼠的新家(树上差分)
  16. openjdk for window
  17. 2017-2018-2 20165327 实验四《Android程序设计》实验报告
  18. bootstrap基础学习小记(二)排版、列表、代码风格、表格
  19. 使用GitHub-Pages创建博客和图片上传问题解决
  20. 每日英语:The Upside of Favoritism

热门文章

  1. Leetcode题目279.完全平方数(动态规划-中等)
  2. win10系统配置FTP
  3. cloud toolkit同时部署多个服务器
  4. Resharper错误提示方法的命名
  5. typescript简单的应用
  6. Nginx作为静态资源web服务-跨站访问
  7. vs下qt的信号与槽实现
  8. Go项目的测试代码1(基础)
  9. [Jenkins]局域网内可访问配置方法 -windows
  10. 机器学习之Xgboost算法