最长回文子串(Manacher算法)
来源:互联网 发布:蚁群算法和遗传算法 编辑:程序博客网 时间:2024/04/29 15:45
- 题目描述:
回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
回文子串,顾名思义,即字符串中满足回文性质的子串。
给出一个只由小写英文字符a,b,c...x,y,z组成的字符串,请输出其中最长的回文子串的长度。
- 输入:
输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串,字符串的长度不大于200000。
- 输出:
对于每组测试用例,输出一个整数,表示该组测试用例的字符串中所包含的的最长回文子串的长度。
- 样例输入:
ababbbbbabba
- 样例输出:
344
#include <stdio.h>char s[200002];char str[400010];int p[400010];int min(int a,int b){return a < b ? a : b;}int pre(){int i,j = 0;str[j++] = '$';for(i = 0;s[i];i++){str[j++] = '#';str[j++] = s[i];}str[j++] = '#';str[j] = '\0';return j;}void manacher(int n){int mx = 0,id,i;p[0] = 0;for(i = 1;i < n;i++){if(mx > i)p[i] = min(mx - i,p[2 * id - i]);elsep[i] = 1;while(str[i - p[i]] == str[i + p[i]])p[i]++;if(p[i] + i > mx){mx = p[i] + i;id = i;}}}int main(int argc, char const *argv[]){while(scanf("%s",s) != EOF){int n = pre();manacher(n);int ans = 0,i;for(i = 1;i < n;i++)if(p[i] > ans)ans = p[i];printf("%d\n",ans - 1);}return 0;}
- Manacher算法求最长回文子串
- Manacher算法求最长回文子串
- 最长回文子串(Manacher算法)
- Manacher算法 最长回文子串
- 最长回文子串的manacher算法
- 最长回文子串,Manacher算法
- Poj3974 最长回文子串 Manacher算法
- 最长回文子串 manacher算法
- Manacher算法(最长子回文串)
- hihocoder1032(最长回文子串manacher算法)
- HDU3068(最长回文子串manacher算法)
- 最长回文子串 用manacher算法
- hiho1032 : 最长回文子串 Manacher算法
- 最长回文子串 - Manacher算法
- 最长回文子串Manacher算法
- Manacher算法 - 最长回文子串
- manacher算法-最长子回文串
- 最长回文子串-Manacher算法
- The Linux Kernel Module Programming Guide
- android读取资源文件的方法
- 个人对jdk的安装流程见解
- android中控件ListView的简单实用例子
- Linux--9:Linux中的TTY
- 最长回文子串(Manacher算法)
- C语言可变参数的实现详解
- follow me
- Linux查看连接数,并发数
- CEF3 笔记一(介绍)
- andori-mapabc:mapview无法显示、不能拖动、缩放失效等问题
- HDU1016Prime Ring Problem(无重复排列+深搜)
- java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
- ListView中分割线的设置