KMP板子错了求助
查看原帖
KMP板子错了求助
289304
HAuCl4楼主2022/10/22 19:50

RT,只过了样例

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000005,maxm=1000005;
int nxt[maxm];
char a[maxn],b[maxm];
int n,m,ans;
void kmp(char *a,int n,char *b,int m)//下标为0
{
	int i=0,j=0;
	while(i<n&&j<m)
	{
//		printf("i=%d j=%d\n",i,j);
		if(j==-1||a[i]==b[j]) i++,j++;
		else j=nxt[j];
		if(j==m)
		{
			printf("%d\n",i-m+1);
			i--;
			j=nxt[j];
		}
	}
}
void get_next(char *b,int m)
{
    nxt[0]=-1;
    int k=-1,j=0;
    while(j<m-1)
    {
        if(k==-1||b[j]==b[k])
        {
            nxt[j]=k;
            ++k;
            ++j;
        }
        else k=nxt[k];
    }
}
int main()
{
	scanf("%s%s",a,b);
	n=strlen(a); m=strlen(b);
	get_next(b,m);
	kmp(a,n,b,m);
	for(int i=0;i<m;i++) printf("%d ",nxt[i]+1);
	return 0;
}

2022/10/22 19:50
加载中...