hdu----(3068)最长回文(manacher)
时间:2022-05-05
本文章向大家介绍hdu----(3068)最长回文(manacher),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8253 Accepted Submission(s): 2825
Problem 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
Source
2009 Multi-University Training Contest 16 - Host by NIT
求最长回文子串.....manacher算法
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define maxn 110020
5 char str[maxn*2];
6 int rad[maxn*2];
7 int Min(int a ,int b){
8 return a<b?a:b;
9 }
10 void init(char s[],int len){
11 int i,j=1;
12 for(i=(len<<1)+1,s[i+1]=' ';i>0;i--){
13 if(i&1) s[i]='#';
14 else {
15 s[i]=s[len-j];
16 j++;
17 }
18 }
19 s[i]='$';
20 }
21 int manacher(int len){
22 memset(rad,0,sizeof(int)*(len+1));
23 int id,mx=0,i,ans=0;
24 for(i=1;i<len;i++){
25 if(mx>i) rad[i]=Min(rad[id*2-i],mx-i);
26 else rad[i]=1;
27 while(str[i+rad[i]]==str[i-rad[i]])rad[i]++;
28 if(i+rad[i]>mx){
29 mx=i+rad[i];
30 id=i;
31 }
32 if(ans<rad[i])ans=rad[i];
33 }
34 return ans-1;
35 }
36 int main(){
37 int len;
38 while(scanf("%s",str)!=EOF){
39 len=strlen(str);
40 init(str,len);
41 printf("%dn",manacher(len*2+1));
42 }
43 return 0;
44 }
- QT Creator 快速入门教程 读书笔记(三)
- WordPress中添加自定义评论表情包的方法(附三套表情包下载)
- 使用新类型Nullable处理数据库表中null字段
- QT Creator 快速入门教程 读书笔记(二)
- 设计模式学习笔记-命令模式
- .com域名和.cn域名的介绍
- Windows安装和使用zookeeper
- 使用MagicAjax 实现无刷新Webparts
- Python 项目实践一(外星人入侵小游戏)第五篇
- Python 项目实践一(外星人入侵小游戏)第三篇
- WordPress自定义栏目运用实例 VI:设置外链缩略图/特色图像
- Python 项目实践一(外星人入侵小游戏)第二篇
- IBatisNet配置
- WordPress设置评论到达一定数量后自动关闭评论功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter 完成全平台制霸:实现 Windows 应用支持
- 尤大 4 天前发在 GitHub 上的 vue-lit 是啥?
- 原创的20个Python自动化案例,一口一个,高效办公!
- 看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!
- 【Hadoop 分布式部署 三:基于Hadoop 2.x 伪分布式部署进行修改配置文件】
- DCL单例模式你不知道的秘密
- 《大话数据结构》队列的顺序存储和链式存储
- 《大话数据结构》栈的顺序存储及链式存储
- 《大话数据结构》之双向链表
- 《大话数据结构》线性表的链式存储结构
- 《大话数据结构》线性表的顺序存储结构
- 《啊哈算法》桶排序详解
- 你不得不知道的Git常用命令
- Java中静态代码块、代码块以及构造函数执行顺序详解
- 手写一个JDK1.7的简版HashMap