有没有大佬帮蒟蒻萌新看看问题
查看原帖
有没有大佬帮蒟蒻萌新看看问题
769154
lvyonghuan楼主2022/11/23 22:02
#include <iostream>
#include <cstring>
using namespace std;
char A[1000000],B[1000000];
int Next[1000000]={0};
int main()
{
	scanf("%s",A);
	scanf("%s",B);
	int len=strlen(B);
	int flag=0;
	for(int i=1;i<len;i++)
	{
		for(;flag&&B[flag]!=B[i];)
		{
			flag=Next[flag];
		}
		if(B[i]==B[flag])
		{
			flag++;
			Next[i]=flag;
		}
	}
	int len_1=strlen(A);
	for(int i=0,j=0;i<=len_1+1;i++)
	{
		while(j&&A[i]!=B[j])
		{
			if(j-1==-1)
			{
				j=0;
			}
			else
			{
				j=Next[j-1];
			}
		}
		if(A[i]==B[j])
		{
			j++;
		}
		if(j==len)
		{
			printf("%d\n",i-len+2);
			if(j-1==-1)
			{
				j=0;
			}
			else
			{
				j=Next[j-1];
			}
		}
	}
	for(int i=0;i<len;i++)
	{
		printf("%d ",Next[i]);
	}
	return 0;
}

WA+TLE了。刚刚开始学KMP,有点懵,有无大佬帮忙看看哪个地方出问题了。

2022/11/23 22:02
加载中...