【捞】求助,遇到了非常申必的BUG
  • 板块灌水区
  • 楼主Kio_
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/9/3 13:22
  • 上次更新2023/11/5 13:47:33
查看原帖
【捞】求助,遇到了非常申必的BUG
127925
Kio_楼主2020/9/3 13:22

没人回只好再发一遍了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)

2020/9/3 13:22
加载中...