51nod_1089 最长回文子串 V2(Manacher算法)
2017-04-26 14:28
302 查看
1089 最长回文子串 V2(Manacher算法)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 100000)
Output
输出最长回文子串的长度L。
Input示例
daabaac
Output示例
5
思路:Manacher算法,线性匹配
英文解释:https://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome-sub-string/
中文解释:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824
代码:
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 100000)
Output
输出最长回文子串的长度L。
Input示例
daabaac
Output示例
5
思路:Manacher算法,线性匹配
英文解释:https://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome-sub-string/
中文解释:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; string str; int p[1000005]; void mlc(int n){ int mx,id; mx=0;id=0; for(int i=1;i<n;i++){ if(mx>i){ p[i]=min(p[id*2-i],mx-i); } else p[i]=1; while(str[i-p[i]]==str[i+p[i]]) p[i]++; if(i+p[i]>mx){ mx=i+p[i]; id=i; } } } int main(){ string s; cin>>s; str+='*'; str+='#'; for(int i=0;i<s.length();i++){ str+=s[i]; str+='#'; } int l=str.length(); mlc(l); int max=-1; for(int i=1;i<l;i++){ if(p[i]>max) max=p[i]; } cout<<max-1<<endl; return 0; }
相关文章推荐
- 51Nod-1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 51nod-【1089 最长回文子串 V2(Manacher算法)】
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 【51NOD-0】1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51nod-1089 最长回文子串 V2(Manacher算法)
- 51Nod - 1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2 (Manacher算法)
- 51Nod 1089 最长回文子串 V2 —— Manacher算法
- 【51nod】1089 最长回文子串 V2(Manacher算法)
- 【Manacher算法】51nod 最长回文子串 V2
- 51nod 1089 最长回文字串V2(Manacher算法)
- [51Nod](1089)最长回文子串 V2 ---- Manacher算法
- 1089 最长回文子串 V2(Manacher算法)
- 51nod--1089 最长回文子串V2(Manacher 算法)
- 51nod1089---最长回文子串 V2(51nod基础:Manacher算法)