传送门

#1032 : 最长回文子串

时间限制:1000ms
单点时限:1000ms
内存限制:64MB

描述

小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。

这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”

小Ho奇怪的问道:“什么叫做最长回文子串呢?”

小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”

小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?

小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”

提示一 提示二 提示三 提示四

样例输入
3
abababa
aaaabaa
acacdas
样例输出
7
5
3

题解:

Manacher算法--O(n)回文子串算法

直接转一个大牛的思路,讲的很好:

http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/

http://acm.hust.edu.cn/vjudge/problem/viewSource.action?id=140283

结果:Accepted      提交时间:2015-05-07 14:11:06

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <cctype>
#include <vector>
#include <cmath> #define ll long long using namespace std; const int M = ;
const int N = ;
const ll mod = ; int T;
char te[N];
char s[*N];
int p[*N];
int ans;
int l; void pre() //为了防止字符比较的时候越界,我在这个加了‘#’的字符串之前还加了另一个特殊字符‘$’,故我的新串下标是从1开始的
{
int l1=strlen(te);
l=*l1+;
s[]='$';
s[]='#';
for(int i=;i<l1;i++){
s[i*+]=te[i];
s[i*+]='#';
}
s[l]='\0';
} void Manacher()
{
int i,mx,id; //我们用mx记在i之前的回文串中,延伸至最右端的位置。同时用id这个变量记下取得这个最优mx时的id值。
mx=;
for(i=;i<l;i++){
if(mx>i){
p[i]=min(p[*id-i],mx-i);
}
else{
p[i]=;
}
for(;s[ i+p[i] ]==s[ i-p[i] ];p[i]++){
if(i+p[i]>mx){
mx=i+p[i];
id=i;
}
}
}
} int main()
{
//freopen("data.in","r",stdin);
scanf("%d",&T);
for(int ccnt=;ccnt<=T;ccnt++){
//while(scanf("%d%d",&a,&b) != EOF) {
scanf("%s",te);
pre();
Manacher();
int i;
ans=;
for(i=;i<l;i++){
ans=max(ans,p[i]-);
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. ubuntu安全卸载移动硬盘(safely remove)
  2. ADO.NET-SqlHelper
  3. Ubuntu install Docker
  4. 堆栈 &amp; Stack and Heap
  5. webservice实验一
  6. Windows Server 2003开机自动启动MySQL服务设置方法
  7. HDU2094(产生冠军)题解
  8. perl 对象 bless 引用
  9. Hadoop 中关于 map,reduce 数量设置
  10. PHP的线程安全与非线程(NTS)安全版本的区别
  11. RLP
  12. 有趣的冷知识:编程中Foo, Bar 到底什么意思?
  13. TreeMap倒序以及遍历
  14. Weblogic java生成wlfullclient.jar
  15. 【Docker】第四篇 Docker仓库管理
  16. Mockito: InvalidUseOfMatchersException
  17. AngularJS 指令的 Scope (作用域)
  18. gem install redis安装时报错:redis requires Ruby version &gt;= 2.2.2
  19. za2
  20. 用HTMLParser解析html时报错:No module named 'htmlentitydefs'

热门文章

  1. 《Python基础教程》 读书笔记 第五章(上)条件语句
  2. mac osx上为qt应用生成debug symbol
  3. Struts2控制文件的上传与下载
  4. android应用流量信息提取
  5. 伪类的格式重点:父标签层级 &amp; 当前标签类型
  6. 你的项目刚刚启动?是时候考虑Globalization了!
  7. DROP DATABASE - 删除一个数据库
  8. vue点击时动态改变样式 ------- 最简单的方法
  9. 关于在Qt里让程序休眠一段时间的方法总结
  10. Python matlab octave 矩阵运算基础