题目描述

给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.

字符串长度为n

输入格式

一行小写英文字符a,b,c...y,z组成的字符串S

输出格式

一个整数表示答案


马拉车算法,O(n)解决,巧妙的利用对称性

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=11000000+20;
char data[N<<1];
int p[N<<1],cnt,ans;
inline void qr(){
char c=getchar();
data[0]='~',data[cnt=1]='|';
while(c<'a'||c>'z')c=getchar();
while(c>='a'&&c<='z')
data[++cnt]=c,data[++cnt]='|',c=getchar();
}
int main(){
qr();
for(int t=1,r=0,mid=0;t<=cnt;++t){
if(t<=r)p[t]=min(p[(mid<<1)-t],r-t+1);
while(data[t-p[t]]==data[t+p[t]])++p[t];
if(p[t]+t>r)r=p[t]+t-1,mid=t;
if(p[t]>ans)ans=p[t];
}
printf("%d\n",ans-1);
}

最新文章

  1. 域名扫描工具Fierce
  2. calender 软文
  3. 【linux】find删除指定时间之前的文件
  4. MVC传递Model
  5. 执行大量的Redis命令,担心效率问题?用Pipelining试试吧~
  6. 通俗易懂的深入理解js闭包
  7. Android-LogCat日志工具(一)
  8. xilinx仿真库的作用(原创)
  9. python学习===打印时间
  10. mssql sqlserver 自动备份存储过程的方法分享
  11. Netty入门(一)之webSocket聊天室
  12. JXNU暑期选拔赛
  13. 利用pandas将numpy数组导出生成excel
  14. 【转】Linux 如何通过命令仅获取IP地址
  15. 【Java】 大话数据结构(17) 排序算法(4) (归并排序)
  16. iview,用render函数渲染
  17. C语言 &#183; 日期计算
  18. 批量删除Redis数据库中的Key
  19. Android 开发工具类 05_Logcat 统一管理类
  20. js事件的捕获和冒泡阶段

热门文章

  1. linux4.1内核配置以及编译及千兆网卡dp83867网卡驱动移植
  2. 你了解MySQL中的锁吗?
  3. 构建大型 Vue.js 项目的10条建议
  4. C++程序员学Python
  5. java本地缓存
  6. java 深拷贝与浅拷贝
  7. 关于jQuery easyUI 添加合计统计行
  8. [干货]AspNetCore熟练应用CancellationToken,CTO会对你刮目相看
  9. Windows下搭建远程Linux主机的图形化本地开发环境
  10. lqb 基础练习 特殊的数字