博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM题目————最长回文串
阅读量:5138 次
发布时间:2019-06-13

本文共 1073 字,大约阅读时间需要 3 分钟。

Description

给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
 

Input

输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
 

Output

每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.
 

Sample Input

aaaa abab
 

Sample Output

4 3

 

用manacher算法求最长回文串长度。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 10000001using namespace std;const int maxn = 110005*2;char str[maxn];int p[maxn];void manacher(char *s, int len){ p[0] = 1 ; int Max = 0, d= 0 ; for(int i=1; i
i ? min(p[d*2-i],Max-i):1 ; while( s[i+p[i]] == s[i-p[i]]) p[i] ++ ; if( i + p[i] > d + p[d] ){ d = i ; Max = i + p[i] ; } }}int main(){ while( ~ scanf("%s",str) ){ int len = strlen(str); for(int i=len; i>=0; i--){ str[(i<<1)+1] = '#' ; str[(i<<1)+2] = str[i] ; } str[0] = '*' ; len = len * 2 + 2 ; manacher(str,len); int ans = 0 ; for(int i=0; i

 

转载于:https://www.cnblogs.com/Asimple/p/5665719.html

你可能感兴趣的文章
并发编程简介
查看>>
第五次作业(最大公约数,最小公倍数)
查看>>
C++两水杯量出所需水量的小算法
查看>>
[面试真题] LeetCode:Same Tree
查看>>
iOS:quartz2D绘图
查看>>
测试步骤
查看>>
perl6 Socket
查看>>
APP 内发送邮件
查看>>
进度条
查看>>
使用命令修改ip地址
查看>>
mac平台安装类似yum的工具
查看>>
hdu3437 划分树 区间内小于第K大的值得和
查看>>
P1113 杂务
查看>>
20155320《网络对抗》MSF基础应用
查看>>
第七章 软件测试 课后习题
查看>>
一篇非常适合git入门的文章
查看>>
四级英语day10
查看>>
基于K-近邻分类算法的手写识别系统
查看>>
使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
查看>>
PC站跳转M站的方法
查看>>