HDU3068最长回文 Manacher算法
2015-10-09 19:45
211 查看
最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12145 Accepted Submission(s): 4458
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算法
算法的基本思路是这样的:把原串每个字符中间用一个串中没出现过的字符分隔#开来(统一奇偶),
同时为了防止越界,在字符串的首部也加入一个特殊符,但是与分隔符不同。
同时字符串的末尾也加入′\0′。
算法的核心:用辅助数组p记录以每个字符为核心的最长回文字符串半径。
也就是p[i]记录了以str[i]为中心的最长回文字符串半径。p[i]最小为1,
此时回文字符串就是字符串本身。示例:原字符串′abba′,处理后的新串′#a#b#b#a#\0’,
得到对应的辅助数组p=[0,1,1,2,1,2,5,2,2,1]。
相关文章推荐
- servlet的上传文件
- 高精度运算之加减乘
- ffmpeg SDK开发手册
- Codeforces 8B
- POJ 1010 STAMPS(dfs)
- ActionBar之自定义分享
- 【work】判断ip地址是否合法
- 重启docker服务器后 遇到 'device or resource busy'错误
- 启动fiddler8888被占用
- [Leetcode]Sum Root to Leaf Numbers
- error LNK2019: 无法解析的外部符号
- 用python3写一个华工SCUT连接的脚本
- ios之viewWithTag
- css 3d效果
- 依赖,关联
- Socket/Epoll主要流程对socket错误码正确处理
- 华为某年的一个机考题:计算最后一个出列者的编号
- codevs1183 泥泞的道路
- Redis阻塞队列原理学习
- linux curl 命令详解,以及实例