码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-05 14:37:49      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:++   n+1   boa   oar   array   分享   span   lap   pen   

技术分享
 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))

标签:++   n+1   boa   oar   array   分享   span   lap   pen   

原文地址:http://www.cnblogs.com/nihai/p/6668604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!