这几天都再研究这个算法
算法本身好像懂又好像不懂
实际测试后
忽然注意到一点
void pk()
{
int i;
int mx = 0;
int id;
for(i=1; i<n; i++)
{
if( mx > i )
p[i] = MIN( p[2*id-i], mx-i );
else
p[i] = 1;
for(; str[i+p[i]] == str[i-p[i]]; p[i]++)
;
if( p[i] + i > mx )
{
mx = p[i] + i;
id = i;
}
}
}
for(; str[i+p[i]] == str[i-p[i]]; p[i]++)
;
我不懂这句为什么不会造成内存问题
实际debug看 跑到可能会错误时 到这句就直接跳过