注:
学长的代码,自己学manacher没学明白,看了看学长的代码,发现简单易懂,但是因为没理解原版manacher,所以看不出区别。如果有哪位大神看出来了。麻烦解释解释
#include<stdio.h>
char qdu[100050];
int manacher()
{
int i;
int res = 0;
for(i = 1;qdu[i];i++)
{
int l = i;
int r = i;
while(qdu[i] == qdu[r+1]) //以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
r++;
i = r;
while(qdu[l-1] == qdu[r+1]) //向两侧扩展,找最大。
{
r++;
l--;
}
if(res < r-l+1) //更新最大值
res = r-l+1;
}
return res;
}
int main()
{
int loop;
qdu[0] = '$';
gets(qdu+1);
printf("%d\n",manachar());
return 0;
}