最长回文子串 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是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...
随机推荐
- Qt之QToolButton
简述 QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar里面. 工具按钮和普通的命令按钮不同,通常不显示文本,而显示图标. 简述 详细描述 常用接口 更多参考 ...
- 我有一个idea,但是没有钱,又没技术怎么办?
我想你还少讲一件事,就是同时如果你也没什么明确的商业计划,恭喜,那你有机会成为马云第二,因为他曾说过自己的成功要素就是「没钱」.「不懂技术」.「没有计划」,要是这么刚好让你从事互联网产业,我看不出三年 ...
- [Angular] Short Imports with TypeScript Path Mapping
The idea is change from: import {CoreModule} from '../core/core.module'; to: import {CoreModule} fro ...
- Linux之我最常用的20条命令
Linux之我最常用的20条命令 玩过 Linux的人都会知道, Linux中的命令的确是非常多,但是玩过 Linux的人也从来不会因为 Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的 ...
- php7-swoole-Class 'swoole_websocket_server' not found 问题
标签(空格分隔): php 分析 nginx/apache 读取的php.uini 文件 和 cli模式的php.ini 文件不同导致的 swoole是在cli模式下运行的 或许你安装swoole扩展 ...
- java9新特性-11-String存储结构变更
1. 官方Feature JEP254: Compact Strings 2. 产生背景 Motivation The current implementation of the String cla ...
- 关于Fragment的setUserVisibleHint() 方法和onCreateView()的执行顺序
1:setUserVisibleHint(boolean isVisibleToUser)的方法就很重要,根据方法名来看当前页面是否可见, 里面的boolean值就是判断当前页面是否可见的变量,所以大 ...
- UVa 1151 Buy or Build【最小生成树】
题意:给出n个点的坐标,现在需要让这n个点连通,可以直接在点与点之间连边,花费为两点之间欧几里得距离的平方,也可以选购套餐,套餐中所含的点是相互连通的 问最少的花费 首先想kruskal算法中,被加入 ...
- numa 和 mysql
cpu numa结构反应的内存访问速度问题: 在多核cpu的时代引入了cpu的numa(非一致内存访问结构): NUMA引入了node的概念,每个物理CPU都被视作一个node,而每个node都有一个 ...
- python 爬虫简介
初识Python爬虫 互联网 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现 ...