下载此文档

HDU3068 KMP求最长回文子串.pdf


文档分类:文学/艺术/军事/历史 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
九野的博客
ACM 今天你AC了吗? 欢迎acmer讨论~ 群号:126270450
HDU3068 KMP求最长回文子串
分类: KMP 2013-12-16 17:04 176人阅读评论(0) 收藏举报
 解析详见:http://blog./s/
 
 
 
#include<>
#include<>
#include<iostream>
using namespace std;
#define N 225000
//dp[i] 表示以i点为中心向右最大回文长度
//则答案就是max(dp[i]) -1
int dp[N];
char P[N], T[N];
//在每一个字符间插入# 这样得到的回文串长度一定是奇数(包含#)
int Have_P(){
int j, len = strlen(T);
j = 0;
P[j++] = '$';
P[j++] = '#';
for(int i = 0; i < len; i++)
P[j++] = T[i], P[j++] = '#';
P[j] = '\0';
return j;
}
void KMP(int Plen){
int mx = 0, id = 0;
dp[0] = 0;
for(int i = 1; i < Plen; i++)
{
dp[i] = mx>i? min(dp[2*id-i], mx-i) : 1;
while(P[i + dp[i]] == P[i - dp[i]])dp[i]++;
if(i + dp[i] > mx)
{
mx = dp[i] + i;
id = i;
}
}
}
int main(){
while(~scanf("%s", T)){
int len, ans = 0;
KMP(len = Have_P());
for(int i = 0; i < len; i++)
ans = max(ans, dp[i]-1);
printf("%d\n",ans);
}
return 0;
1
}
 
更多
上一篇:HDU 2087 KMP裸题
下一篇:HDU 1867 KMP 求最大尾部重叠

0

0
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

核心技术类目
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5
Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop ponents
Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6
Rackspace Web App Sprin

HDU3068 KMP求最长回文子串 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人翩仙妙玉
  • 文件大小0 KB
  • 时间2013-12-19
最近更新