1 条题解

  • 0
    @ 2025-10-19 22:55:25
    #include<iostream>
    #include<cstring>
    #define MAXN 1000010
    using namespace std;
    int kmp[MAXN];
    int la,lb,j; 
    char a[MAXN],b[MAXN];
    int main()
    {
        cin>>a+1;
        cin>>b+1;
        la=strlen(a+1);
        lb=strlen(b+1);
        for (int i=2;i<=lb;i++)
    	   {     
    	   while(j&&b[i]!=b[j+1])
            j=kmp[j];    
           if(b[j+1]==b[i])j++;    
            kmp[i]=j;
           }
        j=0;
        for(int i=1;i<=la;i++)
    	   {
              while(j>0&&b[j+1]!=a[i])
               j=kmp[j];
              if (b[j+1]==a[i]) 
               j++;
              if (j==lb) {cout<<i-lb+1<<endl;j=kmp[j];}
           }
    
        for (int i=1;i<=lb;i++)
        cout<<kmp[i]<<" ";
        return 0;
    }
    
    
    • 1

    信息

    ID
    1381
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    3
    上传者