最长回文子串 hihocode 1032 hdu 3068
最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5158 Accepted Submission(s): 1755
回文就是正反读都是一样的字符串,如aba, abba等
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
char a[];
int i,j,k,maxn=;
cin>>a;
for(int i=;a[i]!='\0';i++)
a[i]=toupper(a[i]);
int len=strlen(a);
for(i=;i<len;i++)
{
for(j=i;j<len;j++)
{
int ok=;
for(k=i;k<=j;k++)
{
if(a[k]!=a[i+j-k]) ok=;
}
if(ok)maxn=max(maxn,j-i+);
}
}
cout<<maxn<<endl;
return ;
}
二、优化算法(O(n^2))ps:分奇偶讨论
确定中心字符,两边扩展。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
int max(int a,int b){
return a>b?a:b;
}
int main()
{
char a[];
int n;
cin>>n;
while(n--)
{
int i,j,maxn=,len;
cin>>a;
len=strlen(a);
for(i=;i<len;i++)
{
for(j=;i-j>= && i+j<len;j++)
{
if(a[i-j]!=a[i+j]) break;
else maxn=max(maxn,j*+);
}
for(j=;i-j>= && i+j+<len;j++)
{
if(a[i-j]!=a[i+j+]) break;
else maxn=max(maxn,j*+);
}
}
cout<<maxn<<endl;
}
return ;
}
三、manacher算法(O(n))ps:优化后的第二种算法
在第二种算法中,每次都确定中心字符两边扩展,并且分奇偶讨论,因此每次操作都会有不必要的操作,而manacher算法就是在每两个字符之间插入'#'字符,从而不需要分奇偶讨论。确定一个中心后,找上一个中心的标记点,标记点加上标记半径判断该点的初始回文状态即p[i]=min(p[id+id-i],p[id]+id-i].
然后在p[i]的基础上扩展当下点的标记半径。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
int p[];
char a[];
int main()
{
while(cin>>a)
{
memset(p,,sizeof(p));
int len=strlen(a),id=,maxlen=;
for(int i=len;i>=;--i)
{
a[(i<<)+]='#';
a[(i<<)+]=a[i];
}
a[0]='#';
for(int i=;i<*len-;i++)
{
if(p[id]+id>i) p[i]=min(p[id*-i],p[id]+id-i);
else p[i]=;
while(a[i-p[i]]==a[i+p[i]]) ++p[i];
if(id+p[id]<i+p[i])id=i;
if(maxlen<p[i])maxlen=p[i];
}
cout<<maxlen-<<endl;
}
return ;
}
hihocode上的这道题就很简单了http://hihocoder.com/problemset/problem/1032
最长回文子串 hihocode 1032 hdu 3068的更多相关文章
- hihoCoder第一周---最长回文子串(1032)
其实这就是mancher算法的板子题,贴个代码好了. 思想请见我的另一篇博客: https://blog.csdn.net/qq_41090676/article/details/86768361 # ...
- 最长回文子串 —— Manacher (马拉车) 算法
最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...
- Manacher (马拉车) 算法:解决最长回文子串的利器
最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...
- hihocode #1032 : 最长回文子串【manacher】模板题
题目链接:https://vjudge.net/problem/HihoCoder-1032 manacher算法详解:https://blog.csdn.net/dyx404514/article/ ...
- 最长回文子串(百度笔试题和hdu 3068)
版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/17123559 求一个字符串的最长回文子串.注 ...
- hdu 3068 最长回文(manachar求最长回文子串)
题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...
- hihocoder #1032 : 最长回文子串 Manacher算法
题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...
- hihocoder #1032 : 最长回文子串【 manacher算法实现 】
#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- hihoCoder #1032 : 最长回文子串 [ Manacher算法--O(n)回文子串算法 ]
传送门 #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...
随机推荐
- 今天遇到的一个诡异的core和解决 std::sort
其实昨天开发pds,就碰到了core,我还以为是内存不够的问题,或者其他问题. 今天把所有代码挪到了as这里,没想到又出core了. 根据直觉,我就觉得可能是std::sort这边的问题. 上网一搜, ...
- Qt 3D教程(二)初步显示3D的内容
Qt3D教程(二)初步显示3D的内容 前一篇很easy,全然就没有牵涉到3D的内容,它仅仅是我们搭建3D应用的基本框架而已,而这一篇.我们将要利用它来初步地显示3D的内容了! 本次目的是将程序中间的内 ...
- 【Linux编程】socket编程
套接字是通信端点的抽象.文件描写叙述符用open函数创建,而套接字描写叙述符用socket函数创建.socket函数原型例如以下: int socket(int domain, int type, i ...
- Tomcat的安装跟配置
安装Tomcat的步骤:1)安装好JDK2)把tomcat-7.0.30软件解压到本地硬盘3)设置环境变量:JAVA_HOME: C:\Program Files\Java\jdk1.7.0_04To ...
- Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
前面的一片文章我们已经讲过使用信号量解决生产者消费者问题.那么什么情况下我们须要引入条件变量呢? 这里借用 http://www.cnblogs.com/ngnetboy/p/3521547.htm ...
- gcc 源代码下载地址
ftp://mirrors-usa.go-parts.com/gcc/releases/
- Seq和Ack
http://blog.csdn.net/bytebai/article/details/21752925 握手阶段: 序号 方向 seq ack1 A-& ...
- kibana 5.5 源码编译踩坑记录
由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行. 注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm ...
- 关于webpack插件
1.HtmlWebpackPlugin 插件 这个插件的作用是依据一个简单的index.html模板,生成一个自动引用你打包后的JS文件的新index.html.这在每次生成的js文件名称不同时非常有 ...
- 关于md解析器
不得不说,博客园的 md 解析器真的不够好.和 csdn 以及 sf 社区的比起来,差太多了.以后,博客园就老老实实写随笔了,文章类的还是用 csdn 吧.