【回文字符串】 最长回文子串O(N) Manacher算法
2014-09-20 17:39
274 查看
原理讲的清晰:Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
注意:
①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯
②最终返回结果是P[i]-1
下面是自己写的Manacher函数
参考代码:http://blog.csdn.net/ggggiqnypgjg/article/details/6645840 用定长的char数组
/article/1650541.html new动态声明后没有delete
http://blog.csdn.net/pi9nc/article/details/9251455
注意:
①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯
②最终返回结果是P[i]-1
下面是自己写的Manacher函数
int manacher(char *src){ int srcLen=strlen(src); int len=2*srcLen+2; char *newStr=new char[len];//还是+3??要不要给\0留个位置??不用 int *P=new int[len]; int i,rst=0; //处理字符串 newStr[0]='$'; newStr[1]='#'; for(i=0;i<srcLen;i++){ newStr[2*i+2]=src[i]; newStr[2*i+3]='#'; } //关键步骤:求P[i] int id=0; int mx=0; P[0]=1; for(i=1;i<len;i++){ if(mx>i) P[i]= MIN(mx-i , P[2*id-i]); else P[i]=1; while(newStr[i+P[i]] == newStr[i-P[i]]) P[i]++;//据说这一步永远不会成立 //更新id和mx if(P[i]+i > mx){ id=i; mx=P[i]+i; } } //找到P[i]中最大值,注意最终返回的结果是P[i]-1 for(i=0;i<len;i++) if(rst<P[i]) rst=P[i]; delete[] P; delete[] newStr; return rst-1; }
参考代码:http://blog.csdn.net/ggggiqnypgjg/article/details/6645840 用定长的char数组
/article/1650541.html new动态声明后没有delete
http://blog.csdn.net/pi9nc/article/details/9251455
相关文章推荐
- hiho#1032 : 最长回文子串 (manacher算法O(n)时间求字符串的最长回文子串 )
- 字符串 专题训练 · 最长回文子串之Manacher算法
- 字符串之最长回文子串 manacher算法
- Manacher算法——找字符串最长的回文子串
- Manacher算法: O(n)时间求字符串的最长回文子串
- 求字符串的最长回文子串(manacher算法O(n)时间)
- Manacher算法: O(n)时间求字符串的最长回文子串
- Manacher算法: O(n)时间求字符串的最长回文子串
- 【字符串处理】最长回文子串笔记(Manacher算法)
- 字符串系列之最长回文子串
- 51nod 1089 最长回文子串 V2(Manacher算法)
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
- 求最长回文子串_Manacher算法_Java实现
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
- [置顶] Manacher算法--求最长回文子串
- HDU 3068 最长回文子串(manacher算法)
- 最长回文子串--轻松理解Manacher算法
- hihocoder #1032 : 最长回文子串【 manacher算法实现 】
- 找出一个字符串中最长回文子串
- 最长回文子串 - Manacher算法