Manacher求最长回文
#1032 : 最长回文子串
- 例子输入
-
3
abababa
aaaabaa
acacdas - 例子输出
-
7
5
3
描写叙述
小Hi和小Ho是一对好朋友。出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助。在编程的学习道路上一同前进。
这一天,他们遇到了一连串的字符串。于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每个的最长回文子串呢?”
小Ho奇怪的问道:“什么叫做最长回文子串呢?”
小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这样的从前往后读和从后往前读一模一样的字符串。所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”
小Ho道:“原来如此!
那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?
小Hi笑着说道:“这个非常easy啦,你仅仅须要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数。然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。
而你要告诉我你的答案的话,仅仅要将你计算出的最长回文子串的长度依照我给你的顺序依次输出到标准输出就能够了!你看这就是一个样例。”
马拉车好写又好用
#include<stdio.h>
#include<string.h>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<algorithm>
#include<iostream>
typedef long long LL;
using namespace std;
#define maxn (int)2e6+3
int p[maxn];
char str[(maxn)>>1],s[maxn];
int manacher(char *str)
{
int len=strlen(str);
s[0]='$';s[1]='#';
for(int i=0;i<=len;i++)
{
s[2*i+2]=str[i];
s[2*i+3]='#';
}
int n=strlen(s);
int r=0,tmp=1,ans=0;
for(int i=1;i<n;i++)
{
if(r>i)p[i]=min(p[2*tmp-i],r-i);
else p[i]=1;
while(s[i+p[i]]==s[i-p[i]])p[i]++;
if(p[i]>ans)ans=p[i];
if(i+p[i]>r)
{
r=i+p[i];
tmp=i;
}
}
return ans-1;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
printf("%d\n",manacher(str));
}
return 0;
}
Manacher求最长回文的更多相关文章
- Manacher 求最长回文子串算法
Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文 ...
- manacher求最长回文子串算法
原文:http://www.felix021.com/blog/read.php?2040 首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个 ...
- HDU 4513 哥几个系列故事——形成完善II manacher求最长回文
标题来源:哥几个系列故事--形成完善II 意甲冠军:中国 思维:在manacher断 保证非严格递减即可了 #include <cstdio> #include <cstring&g ...
- manacher求最长回文子串算法模板
#include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- Manacher模板( 线性求最长回文子串 )
模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...
- [hdu3068 最长回文]Manacher算法,O(N)求最长回文子串
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意:求一个字符串的最长回文子串 思路: 枚举子串的两个端点,根据回文串的定义来判断其是否是回文 ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
随机推荐
- jQuery——多库共存
多库共存:jQuery占用了$ 和jQuery这两个变量.当在同一个页面中引用了jQuery这个js库,并且引用的其他库(或者其他版本的jQuery库)中也用到了$或者jQuery这两个变量,那么,要 ...
- 如何在Linuxt系统下运行maven项目
如何在Linuxt系统下运行maven项目 我们知道现在利用MAVEN来管理JAVA项目是非常常见的.比如公司一般都有一个自己的MAVEN仓库,通过MAVEN仓库来解决我们的项目依赖,更加方便的构建项 ...
- 如何设置“用eclipse开发时自动在顶端产生import”?
eclipse新版本中的默认设置可能导致自动在生成import时是在代码中,而大多数时间我们需要自动生成import在代码顶端,按照如下设置即可纠正
- ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
原文链接:caffe Model的可视化 snapshot: 6000 一个在线可视化小工具:http://blog.csdn.net/10km/article/details/52713 ...
- CNN结构:Windows使用FasterRCNN-C++版本
参考文章:Windows下VS2013 C++编译测试faster-rcnn. 本文与作者的所写方法有些许不同,欲速则不达,没有按照作者的推荐方法,绕了个弯弯. Windows版本纯C++版本的Fas ...
- 【技术累积】【点】【java】【30】代理模式
基础 代理模式是Java常见的设计模式之一.所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 什么是代理 参考现实生活中的代理 比如某个品牌的某个省的代理商,作 ...
- WPF中的两个绑定场景
1. 如何在诸如ListBox这样的项中绑定父类数据上下文. <ListBox Grid.Row=" ItemsSource="{Binding Entries}" ...
- Centos7 Openstack - (第二节)添加认证服务(Keystone)
Centos7 install Openstack - (第二节)添加认证服务(Keystone) 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack ...
- PHP 之转换excel表格中的经纬度
<?php set_time_limit(0); include './plugin/PHPExcel/PHPExcel.php'; include './plugin/PHPExcel/PHP ...
- Spring Boot 集成 JWT 实现单点登录授权
使用步骤如下:1. 添加Gradle依赖: dependencies { implementation 'com.auth0:java-jwt:3.3.0' implementation('org.s ...