Manacher计算回文子串-O(n)

来源:互联网 发布:淘宝号信誉查询网址 编辑:程序博客网 时间:2024/05/22 09:48

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;    }}
0 0
原创粉丝点击