1 条题解

  • 1
    @ 2023-7-7 17:04:32

    image image image image

    #include <bits/stdc++.h> 
    using namespace std;
    typedef long long ll;
    const int N = 1000005;
    int n,m,nex[N];
    char a[N],b[N];
    int main()
    {
    	cin>>b+1>>a+1;
    	n=strlen(a+1);
    	m=strlen(b+1);
    	nex[1]=0;//在万能头下不能使用next变量
    	for (int i=2,j=0;i<=n;++i){
    		while (j>0 && a[i]!=a[j+1]) j=nex[j];
    		if (a[i]==a[j+1]) j++;
    		nex[i]=j;
    	}
    	for (int i=1,j=0;i<=m;++i){
    		while (j>0 && (j==n || b[i]!=a[j+1])) j=nex[j];
    		if (b[i]==a[j+1]) j++;
    		if (j==n) cout<<i-n+1<<"\n";
    	}
    	for (int i=1;i<=n;++i) cout<<nex[i]<<' ';
    }
    
    • 1

    信息

    ID
    276
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    52
    已通过
    31
    上传者