没人回只好再发一遍了qwq
RT,代码如下:
/* 以上省略 */
string a,b;
int ans=-2,j=-1;
int p[114514];
cin>>a>>b;
for(int i=-1;i<a.size();i++)//问题就在这行
{
while(j>-1&&a[i+1]!=b[j+1])j=p[j];
if(a[i+1]==b[j+1])j++;
else j=-1;
if(j>ans)ans=j;
}
return !printf("%d",ans);
}
问题:为啥问题行那里我写成 i<a.size() 连循环都进不去,写成 i<14 才可以输出正确结果???
输入:
abababaababacb
ababacb
(附:p数组的预处理:(此处不太重要)
for(int i=0;i<b.size();i++)
{
if(b[i+1]==b[j+1])j++;
else j=-1;
p[i+1]=j;
}
没错就是KMP
(不要问我为啥写成这样qwq 蒟蒻刚学KMP,只是想先按我目前对KMP的理解写一下代码试试qwq)