最长的回文串——hdu3068
http://acm.hdu.edu.cn/showproblem.php?pid=3068
abcba 5
aab 2
在一个字符串里寻找一条最长的回文串
比较直接的想法是枚举中心点 然后像两边扩散,但这样不仅要考虑最长子串的奇数偶数情况,而且时间复杂度会很高,因为会有比较多的重复计算
分析 aaaab, abcba
变成 #a#a#a#a#b# , #a#b#c#b#a#
就都成了奇数子串
现在再用一个数组P保存到该点的最长回文
#a#a#a#a#b#
12345432131
if( mx > i )
p[i] = min( p[2*id-i], mx-i );
这一句减少了重复计算过程
至于为什么要取小,考虑
abcbabc
#include<stdio.h>
#include<string.h> char ss[];
char ne[];
int p[];
int len; int min(int a,int b){
return a>b?b:a;
} void pre()
{
int i,n2;
len=strlen(ss);
n2=len*;
for(i=;i<=n2;i++){
p[i]=;
}
ne[]='#';
for(i=;i<len;i++){
ne[*i+]=ss[i];
ne[*i+]='#';
}
ne[*len+]='@';//end
} int cal(){
int i,max=;
int id;
int n=len*;
int mx = ; for(i=; i<n; i++)
{
if( mx > i )
p[i] = min( p[*id-i], mx-i );
else
p[i] = ;
for(; ne[i+p[i]] == ne[i-p[i]]; p[i]++)
;
if( p[i] + i > mx )
{
mx = p[i] + i;
id = i;
}
} for(i=;i<n;i++){
if(p[i]>max)max=p[i];
} return max;
} int main()
{
int n2,i,max=,p;
while(scanf("%s",ss)!=EOF){
pre();max=cal();
printf("%d\n",max-);
}
return ;
}
最长的回文串——hdu3068的更多相关文章
- 【BZOJ】【2565】最长双回文串
Manacher算法 找出一个最长子串S=X+Y,且X和Y都是回文串,求最长的长度是多少…… 同时找两个串明显很难搞啊……但是我们可以先找到所有的回文串!在找回文串的同时我们可以预处理出来l[i]和r ...
- BZOJ 2565: 最长双回文串 [Manacher]
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1842 Solved: 935[Submit][Status][Discu ...
- 【BZOJ2565】最长双回文串(回文树)
[BZOJ2565]最长双回文串(回文树) 题面 BZOJ 题解 枚举断点\(i\) 显然的,我们要求的就是以\(i\)结尾的最长回文后缀的长度 再加上以\(i+1\)开头的最长回文前缀的长度 至于最 ...
- 最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现
首先还是先解释一下什么是回文串:就是从左到右或者从右到左读,都是同样的字符串.比如:上海自来水来自海上,bob等等. 那么什么又是找出最长回文串呢? 例如:字符串abcdefedcfggggggfc, ...
- BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)
BZOJ 洛谷 求给定串的最长双回文串. \(n\leq10^5\). Manacher: 记\(R_i\)表示以\(i\)位置为结尾的最长回文串长度,\(L_i\)表示以\(i\)开头的最长回文串长 ...
- bzoj2565: 最长双回文串 pam
题意:找一个串中的最长连续两个回文子串长度 题解:建两个回文树,一个正着,一个反着,每次add之后last的长度就是后缀最长的回文串长度,然后两边加一遍即可 /******************** ...
- P4555 [国家集训队]最长双回文串
P4555 [国家集训队]最长双回文串 manacher 用manacher在处理时顺便把以某点开头/结尾的最长回文串的长度也处理掉. 然后枚举. #include<iostream> # ...
- Tsinsen 最长双回文串
求最长双回文串,正反建回文树求最大. 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1280 By:大奕哥 #include<bits/ ...
- bzoj 2565: 最长双回文串 manacher算法
2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...
随机推荐
- Contest-hunter 暑假送温暖 SRM01
一直找不到好的题去做...于是想到了srm...回来补题...QAQ 从srm01补起 A 题意:n个数,排成一列,刚开始都是1,如果左右相等就可以合并,问最后的数列长什么样. 思路:比赛的时候直接敲 ...
- handle 机制的原理是什么
作者:milter链接:https://www.zhihu.com/question/19703357/answer/107984017来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- XP_SP3_专业汉化版__x86_cd_x14-80404
1.镜像文件: zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso 来自 msdn itellyou 2. ...
- Java 基于JavaMail的邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...
- 公共域名服务DNS 114.114.114.114和8.8.8.8
一.两者的联系 114.114.114.114和8.8.8.8,这两个IP地址都属于公共域名解析服务DNS其中的一部分,而且由于不是用于商业用途的,这两个DNS都很纯净,不用担心因ISP运营商导致的D ...
- python random使用生成随机字符串
应用python random标准库做一个随机生成密码的程序,可以随机生成任意多个字符.(基于python2.7,如果是python3需要修改下) 案例: #-*-coding:utf-8 -*-#a ...
- python之list,tuple,str,dic简单记录(一)
list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表.一旦你创建了一个列表,你就可以添加 ...
- 0 与 “0" 与 '\0' 与 '0'相互之间的区别
1. '\0'和‘0’都是字符,对应的ASCII值分别是0和48. 2. 0表示一个数字.也可以表示ASCII值,对应字符'\0'. 3. “0”表示字符串,第一个字符是'0'.
- Ceph配置项动态变更机制浅析
转自:https://www.ustack.com/blog/ceph%e9%85%8d%e7%bd%ae%e9%a1%b9%e5%8a%a8%e6%80%81%e5%8f%98%e6%9b%b4%e ...
- LeetCode OJ:Sqrt(x)(平方根)
Implement int sqrt(int x). Compute and return the square root of x. 简单的二分法,注意mid应该选为long,否则容易溢出: cla ...