hdu 3068 最长回文 Manacher算法模板题
2017-07-28 19:24
232 查看
题意:
给定一个字符串,输出其最长回文串的长度。
题解:
运用马拉车算法模板即可。
代码:
给定一个字符串,输出其最长回文串的长度。
题解:
运用马拉车算法模板即可。
代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N = 200010; char s , str[N*2]; int p[N*2]; int manacher() { int i; for(i = 1; s[i]; i++) str[i*2] = s[i], str[i*2+1] = '#'; str[0] = '?', str[1] = '#', str[i*2] = '\0'; int res = 0, k = 0, maxk = 0; for(int i = 2; str[i]; i++) { p[i] = i < maxk ? min(maxk - i, p[2*k-i]) : 1; while(str[i-p[i]] == str[i+p[i]]) p[i]++; if(p[i] + i > maxk) k = i, maxk = i + p[i]; res = max(res, p[i]); } return res - 1; } int main() { while(~scanf("%s",s+1)) cout<<manacher()<<endl; return 0; }
相关文章推荐
- HDU 3068 最长回文(Manacher算法模板)
- hdu 3068 最长回文(Manacher算法入门模板题)+解题套路
- HDU 3068 最长回文(manacher算法模板)
- HDU 3068 最长回文(manacher算法)
- hdu 3068 最长回文子串 Manacher算法
- hdu【最长回文子串——Manacher算法】POJ 3974/HDU 3068
- hdu 3068最长回文 Manacher算法
- Hdu 3068 最长回文 (manacher算法)
- hdu 3068 最长回文(manacher算法)
- hdu 3068 最长回文 (manacher算法)
- hdu 3068 最长回文(manachar模板)
- [hdu 3068] 最长回文 manacher算法
- HDU 3068 最长回文子串(manacher算法)
- hdu 3068 最长回文 manacher算法
- HDU 3068 最长回文 (manacher算法)
- 【Manacher模板】HDU 3068——求最长回文子串
- HDU-3068 最长回文 Manacher算法
- HDU 3068 最长回文 Manacher算法
- hdu 3068 最长回文子串 马拉车模板
- 最大算法【Manacher模板】HDU 3068——求最长回文子串