模板:Manacher算法(马拉车算法)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板:Manacher算法(马拉车算法)相关的知识,希望对你有一定的参考价值。
1 //Manacher算法 求最长回文子串 2 int Init(){ 3 int len=strlen(s); 4 s_new[0]=‘$‘;s_new[1]=‘#‘; 5 int j=2; 6 for(int i=0;i<len;i++){ 7 s_new[j++]=s[i]; 8 s_new[j++]=‘#‘; 9 } 10 s_new[j]=‘\0‘; 11 return j; 12 } 13 14 int Manacher(){ 15 int len=Init(); 16 int max_len=-1; 17 int id,mx=0; 18 for(int i=1;i<len;i++){ 19 if(i<mx) p[i]=min(p[2*id-i],mx-i); 20 else p[i]=1; 21 while(s_new[i-p[i]]==s_new[i+p[i]]) p[i]++; 22 if(mx<i+p[i]) {id=i;mx=i+p[i];} 23 max_len=max(max_len,p[i]-1); 24 } 25 return max_len; 26 }
以上是关于模板:Manacher算法(马拉车算法)的主要内容,如果未能解决你的问题,请参考以下文章