Manacher——最大回文子串的线性算法
2016-03-18 16:44
302 查看
问题描述
回文串:正读和反读都一样的字符串输入一个字符串,求出其中最大的回文子串。
Manacher——最大回文子串的线性算法
点击详细了解算法模板
随便写的,应该有bug= =#include<iostream> #include<cstring> #include<string> #define maxn 60100 using namespace std; int n; char s[maxn]; int p[maxn]; void init(){ cin >> n; n=n*2+1; getchar(); s[0]='$'; for (int i=2;i<=n;i+=2){ s[i-1]='#'; s[i]=getchar(); } s ='#'; s[n+1]='@'; } int manacher(){ memset(p,0,sizeof(p)); int maxr=0,maxid=0,ans=0; for (int i=1;i<=n;i++){ p[i]=(i<maxr)?min(p[maxid*2-i],maxr-i):1; while (s[i+p[i]]==s[i-p[i]]) p[i]++; if (i+p[i]>maxr) maxr=i+p[i],maxid=i; ans=max(ans,p[i]-1); } return ans; } int main(){ init(); cout << manacher() << endl; }
相关文章推荐
- UVA 12378 Ball Blasting Game
- 最长回文子串
- manacher算法
- 【HDU3294,URAL1294】manacher算法
- LeetCode 5 最大回文子串
- hiho第一周——最长回文子串
- Longest Palindromic Substring
- 最长回文子串,Manacher算法
- Manacher算法-求字符串中最长回文串
- Manacher算法之个人愚见
- 最长回文串的解法---Manacher算法
- POJ 3974 Palindrome
- HDU 3068 最长回文
- bzoj-3676 回文串
- KT学算法(三)——最长回文子串与Manacher算法
- 最长回文子串
- 1040. Longest Symmetric String (25)【最长回文子串-马拉车(manacher算法)——PAT (Advanced Level) Practise
- Manacher算法--O(n)回文子串算法
- Longest Palindromic Substring
- HDU 3068 最长回文子串