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

RT,代码如下:

/* 以上省略 */
string a,b;
int ans=-2;
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的理解写一下代码而已)

2020/9/2 22:38
加载中...