這幾天都再研究這個算法
算法本身好像懂又好像不懂
實際測試後
忽然注意到一點
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看 跑到可能會錯誤時 到這句就直接跳過