Manacher算法——最长回文子串(O(n))

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Manacher算法——最长回文子串(O(n))相关的知识,希望对你有一定的参考价值。

技术分享
 1 public static int Manacher(String A,int n){
 2         char AA[]=A.toCharArray();
 3         char BB[]=new char[2*n+3];
 4         int k=0;
 5          for(int i=1;i<=2*n+1;i=i+2){
 6              BB[i]=‘#‘;
 7              if(i+1<=2*n+1)BB[i+1]=AA[k++];
 8          }
 9          BB[0]=‘$‘;//防止数组越界
10          BB[2*n+2]=‘&‘;//防止数组越界
11          int len[]=new int[2*n+3];
12          int po=0;//最长回文子串的中心
13          int board=0;//最长回文子串的右边界
14          int sum=0;//最长回文子串长度
15          for(int i=1;i<=2*n+1;i++){
16              if(i<=board)len[i]=len[2*po-i]<(board-i)?len[2*po-i]:board-i;
17              else len[i]=1;
18         while(BB[i+len[i]]==BB[i-len[i]])
19             len[i]++;
20         if(i+len[i]>board){
21             board=i+len[i];
22             po=i;
23         }
24         sum=sum>len[i]?sum:len[i];
25     }
26          return sum>2?sum-1:0;
27 }
View Code

 

以上是关于Manacher算法——最长回文子串(O(n))的主要内容,如果未能解决你的问题,请参考以下文章

算法-最长回文子串(Manacher算法)

最长回文子串(动规,中心扩散法,Manacher算法)

Manacher算法-最长回文子串

Manacher 算法详解:O(n) 复杂度求最长回文子串

Manacher 算法详解:O(n) 复杂度求最长回文子串

最长回文子串问题—Manacher算法