Manacher求最长回文
#1032 : 最长回文子串
- 例子输入
-
- 3
- abababa
- aaaabaa
- acacdas
- 3
- 例子输出
-
- 7
- 5
- 3
- 7
描写叙述
小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 ...
随机推荐
- ibatis知识点
1:ibatis是apache的一个开源的项目,是一个O/R mapping解决方案,优点,小巧,灵活.2:搭建环境:导入ibatis相关jar包,jdbc驱动包等3:配置文件: jdbc连接的属性文 ...
- Linux下的文件结构,及对应文件夹的作用
Linux下的文件结构,及对应文件夹的作用 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比 ...
- java攻城狮之路--复习JDBC(数据库连接池 : C3P0、DBCP)
复习数据库连接池 : C3P0.DBCP 1.数据库连接池技术的优点: •资源重用: 由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销.在减少系统消耗的基础上,另一方面也增 ...
- WPF中的两个绑定场景
1. 如何在诸如ListBox这样的项中绑定父类数据上下文. <ListBox Grid.Row=" ItemsSource="{Binding Entries}" ...
- PHP 之递归遍历目录与删除
/** * @Description: 递归查询目录文件 * @Author: Yang * @param $path * @param int $level * @return array */ f ...
- 如何创建一个项目,让gitlab自动触发jenkins进行构建
前进是:你已经配置好jenkins+gitlab自动化布置了,这里只是常规构建新的项目时,需要做的配置,记录下来,以免忘了又着急 参考这篇博客: https://www.jianshu.com/p/e ...
- PHP 设计模式--序言
面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C++之后 ...
- css页面布局总结
W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...
- IO文件读取
/** *按字节读取文件 */@Testpublic void readerByte() { File file = new File("D:\\BindCheckControllerTes ...
- 【转】jmeter定时调度,持续并发,使用简介
一.安装Jmeter 1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载 ...