Manacher计算回文子串-O(n)
2017-05-03 14:26
99 查看
Manacher计算回文子串-O(n)
最长回文子串问题:给定一个字符串,求它的最长回文子串长度。
解释
java代码
public class Solution { public String longestPalindrome(String s) { if(s.equals("")){ return ""; } int length=s.length(); String str=""; for(int i=0;i<length;i++){ str=str+"#"+s.charAt(i); } str=str+"#"; int lengthstr=2*length+1; int MaxRight=0; int pos=0; int[] RL=new int[lengthstr]; int count=0; int value=0; for(int i=0;i<lengthstr;i++){ if(i>=MaxRight){ RL[i]=1; }else{ RL[i]=(RL[2*pos-i]>MaxRight-i?MaxRight-i:RL[2*pos-i]); } while((i>=RL[i])&&(i+RL[i]<lengthstr)&&(str.charAt(i-RL[i])==str.charAt(i+RL[i]))){ RL[i]++; } if( RL[i]+i-1>MaxRight){ MaxRight=RL[i]+i-1; pos=i; } if(RL[i]-1>value){ count=i; value=RL[i]-1; } } String result=str.substring(count-value,count+value+1); result=result.replaceAll("#",""); return result; } }
相关文章推荐
- manacher算法计算最长回文子串
- hihoCoder #1032 : 最长回文子串(manacher)
- Manacher解决最长回文子串
- Manacher算法--O(n)回文子串算法
- 【Ural 1297】Palindrome manacher 最长回文子串
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- O(n)回文子串(Manacher)算法
- Manacher算法求字符串的最长回文子串
- Manacher 最长回文子串。
- hihoCoder1032 : 最长回文子串【manacher】
- 计算字符串的最长回文子串 :Manacher算法介绍
- manacher算法--最长回文子串
- [hihoCoder 1032]最长回文子串[Manacher]
- hdu 4513 3068 Manacher算法--O(n)回文子串算法
- 最长回文子串——Manacher 算法
- Manacher 最长回文子串
- 最长回文子串算法-- Manacher算法--O(n)
- POJ 3974 HDU 3068 最长回文子串 Manacher 算法
- 详解最长回文子串Manacher