最长的回文串——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. ...
随机推荐
- spring的cglib代理
1.被代理类Person.java package com.xiaostudy; /** * @desc 被代理类 * * @author xiaostudy * */ public class Pe ...
- 关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑
探索 计算机不会欺骗人,一切按照规则执行,说找不到这个文件,那肯定就是真的找不到,至于为什么找不到,那就是因为我们理解有偏差,我最初理解的'./'是当前执行js文件所在的文件夹的绝对路径,然后Node ...
- JDK安装配置教程
一.首先下载JDK的最新版本.可以去http://java.sun.com/javase/downloads/index.jsp下载最新版本JDK1.6.一切下载后选择安装路径,例如我选择安装在&qu ...
- Ubuntu 通过APT安装Tomcat
Ubuntu 通过APT安装Tomcat 安装 sudo apt-get install tomcat8 tomcat8-docs tomcat8-examples tomcat8-admin # s ...
- Web2.0 TA 问题记录
记录一下上学期在当Web2.0 TA的时候遇到过的小朋友们问过的问题,可能会成为以后我开发上遇到的问题. 1. 元素的背景默认是boader origin的,也就是说是从边框开始延伸的. 但如果对bo ...
- python中的set类型
一. 定义 set是一个无序且不重复的元素集合 set和dict类似,是一组key的集合,但不存储value set有以下特性: 1. 由于key不能重复,所有set中没有重复的key 2. 元素为不 ...
- 将本地代码提交到gitlub
第一步:建立git仓库 cd到本地项目根路径下面,执行git命令:git init $ git init Initialized empty Git repository in D:/my_wor ...
- vim编辑16进制
你可以在vim中可以把文件转换为16进制来显示: :%!xxd 解释:把所有的行(%)用本地(!)的xxd程序打开. xxd本是linux下一个显示.编辑.转换二进制的命令. 返回正常显示: :%!x ...
- git修改远端服务器地址
方法有三种: 1.修改命令 git remote set-url origin [url] 2.先删后加 git remote rm origingit remote add origin [url] ...
- react-hooks: CSSProperties
1.定义变量 const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", b ...