您的位置:首页 > 其它

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: