hdu3068 最长回文(manacher 算法)
2024-08-28 09:31:40
题意:
给定字符串。求字符串中的最长回文序列
解题思路:
manacher 算法
时间复杂度:O(N)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 110010
using namespace std;
char b[MAXN],a[MAXN<<1];
int p[MAXN<<1];
int n;
int main(){
while(scanf("%s",&b[1])!=EOF){
int i;
for(i=1;b[i]!='\0';++i){
a[(i<<1)]=b[i];
a[(i<<1)+1]='#';
}
a[0]='?';
a[1]='#';
n=(i<<1)+2;
a[n]=0;
int MaxId,MaxL,id;
MaxId=MaxL=0;
memset(p,0,sizeof(p));
for(int i=1;i<n;++i){
if(MaxId>i)
p[i]=min(p[2*id-i],MaxId-i);
else
p[i]=1;
while(a[i+p[i]]==a[i-p[i]])
p[i]++;
if(p[i]+i>MaxId)
{
MaxId=p[i]+i;
id=i;
}
if(p[i]>MaxL)
MaxL=p[i];
}
printf("%d\n",MaxL-1);
}
return 0;
}
最新文章
- 1.[WP Developer体验Andriod开发]之Andriod布局 VS WinPhone布局
- 遍历Map的两种方法(有排序)
- php大力力 [010节]PHP常量
- ubuntu 关机,重启,注销命令
- android 定时执行一个任务
- 心情记录&;考试总结 3.30
- G++ 教程(转)
- 在Centos 5.4上安装Mysql5.5.10 (整理以前的工作文档)
- Android-Launcher开发之ShortCut(1)
- VisualVM监控远程主机上的JAVA应用程序
- TensorFlow实战之实现AlexNet经典卷积神经网络
- 图解TCP三次握手
- 1(2)IO流---字节流
- mysql 分页数据错乱
- idea中的language level 介绍
- Android Launcher分析和修改7——AllApp全部应用列表(AppsCustomizeTabHost)
- RabbitMQ学习笔记(一):安装及Springboot集成
- PHP学习方法总结
- P1446 [HNOI2008]Cards
- linux基础命令之sed