大致题意:
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度。
大致思路:
这题用后缀数组超时了……囧rz。其实这里用的是manacher算法,效率为O(n),比后缀数组的O(log n)要高。
算法详见http://blog.csdn.net/tanhaiyuan/article/details/7091019
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=100005;
char str[nMax], str1[2*nMax];
int len,p[2*nMax];
void Build() { //abc-->@#a#b#c#
int i=0,j;
str1[0]='@';//开始加入另特殊字符
str1[1]='#';
j=2;
for(i=0; i<len; i++ ){//在每个字符两边都插入一个特殊字符
str1[j++]=str[i];
str1[j++]='#';
}
str1[j]='\0';
}
int manacher(){
int idd,mxx=0,maxx=0,record;
memset(p,0,sizeof(p));
for(int i=1;str1[i]!='\0';i++){
if( mxx>i )
p[i]=min(mxx-i, p[2*idd-i]);
else p[i]=1;
while(str1[i+p[i]]==str1[i-p[i]])
p[i]++;
if( i+p[i]>mxx ){
mxx=i+p[i];
idd=i;
}
if( p[i]>maxx){
maxx=p[i]-1;//P[id]-1就是该回文子串在原串中的长度
record=i;
}
}
return maxx;
}
int main(){
int i, j,ans;
while(scanf("%s",str)!=EOF){
len=strlen(str);
Build();
ans=manacher();
printf("%d\n",ans);
}
}
分享到:
相关推荐
例如,在解决HDOJ_3068_最长回文子串问题时,Manacher算法能够快速准确地找出给定字符串中的最长回文子串,为各种文本分析、模式匹配等任务提供了高效的解决方案。 综上所述,Manacher算法作为一种专门针对回文子串...
在字符串处理中,能够快速找到最长回文子串是许多应用场景的基础,比如DNA序列分析、网络协议的校验等。Manacher算法的巧妙之处在于,它摒弃了传统的动态规划方法中O(n^2)的时间复杂度,而是将问题转化为在O(n)时间...
5. **应用领域**:字符串处理、网络流、模拟、游戏理论等。 【压缩包子文件的文件名称列表】:HDOJ题目分类.pdf 这个PDF文档很可能包含了HDOJ平台上所有题目的详细分类列表,每种分类下可能有对应的题目编号、题目...
7. **字符串处理**:模式匹配(KMP、Boyer-Moore)、字符串操作(子串查找、最长重复子串等)在文本处理中至关重要。 8. **数学知识**:包括数论(质因数分解、模运算)、组合数学(排列组合、鸽巢原理)、图论中的...
- 在此题中,两个大整数是作为字符串输入的,因为字符串没有长度限制,可以很好地用来表示任意大的整数。 - 使用 `scanf` 函数读取字符串,如 `scanf("%s %s", a, b);`,其中 `a` 和 `b` 分别代表两个大整数。 2...
### 最长公共子序列问题详解 #### 一、问题定义及背景 最长公共子序列(Longest Common Subsequence,简称LCS)问题属于计算机科学领域中的一个重要问题,尤其是在算法设计与分析方面。此问题的核心在于寻找两个...
- 使用循环或字符串函数检查字符串是否包含特定字符序列。 - 如果包含,则输出“YES”,否则输出“NO”。 ##### 3. Elevator (HDOJ1008) **知识点:** - 排序算法。 - 最优路径寻找。 **解题思路:** - 对输入楼层...
3. **字符串处理**:在编程竞赛中,字符串处理题目常见,涉及模式匹配、子串查找、字符串反转等。熟悉KMP、Boyer-Moore等字符串匹配算法能提高解题效率。 4. **数学应用**:部分题目可能需要运用到离散数学、组合...
题目要求找出一组字符串中,最长的那个字符串X,使得X或者其逆序可以作为任意一个给定字符串的子串。对于这类问题,我们可以首先对字符串按长度排序,然后从最短的字符串开始,检查它的所有子串是否满足条件,从而...
6. **字符串处理**:模式匹配(KMP、Boyer-Moore、Rabin-Karp)、最长公共前后缀、编辑距离等。 7. **计算几何**:直线与圆的交点、点与多边形的关系、凸包问题等。 学习这些源代码可以提升编程能力,尤其是解决...
这意味着这些题目可能涵盖了从基础到高级的各种难度,包括但不限于排序、搜索、图论、动态规划、字符串处理、递归等常见算法主题。 在【压缩包子文件的文件名称列表】中,我们看到" HDOJ80 "这个文件,这可能是一个...
《HDOJ离线版:探索编程竞赛的智慧宝库》 HDOJ,全称为“杭州电子科技大学在线评测系统”(Hangzhou Dianzi University Online Judge),是中国早期的编程竞赛平台之一,深受广大编程爱好者和在校学生的喜爱。HDOJ...
【标题】"hdoj.rar_Dividing HDOJ_OJ 1082_hdoj 10_杭电oj_杭电oj1000" 涉及的知识点主要围绕着“杭电在线判题系统(HDOJ)”以及其中的题目1082和10系列题目。HDOJ是杭州电子科技大学主办的一个在线编程竞赛平台,...
这些文件是针对“hdoj”(HDU Online Judge)在线编程竞赛平台的解题代码,涵盖了题目编号从1000到1050的若干题目。HDU Online Judge是一个用于训练和测试编程技能的系统,用户可以提交代码解决各种算法问题,并获取...
"hdoj--acm题目,有注释" 本资源提供了多个 ACM 题目的解决方案,代码都带有注释,非常适合初学者学习。下面是对每个题目的知识点总结: 2000:本题目要求输入三个字符,输出按照从小到大排序的结果。本代码使用了...
根据给定的文件信息,我们可以总结出以下关于“hdoj2066最短路径”的相关知识点: ## hdoj2066最短路径概述 ### 标题解析:“hdoj2066最短路” - **hdoj**:High Density Online Judge(高密度在线评测系统),是...
hdoj-problem-archive 杭电OJ题目源码记录 —— a source code of hdoj acm problem archive 简介 此项目为 的 题目以及代码仓库 src 中每一个文件夹代表一个题目 每个文件夹中都有 原题文档介绍.md 原题文档介绍.md...
ACM ICPC HDOJ1002
ACM ICPC HDOJ1001
hdoj1001标程