洛谷3375 KMP字符串匹配

Posted ONION_CYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷3375 KMP字符串匹配相关的知识,希望对你有一定的参考价值。

【算法】KMP

【题解】【算法】字符串

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1000010,maxm=1010;
char A[maxn],B[maxm];
int p[maxm],n,m;
int main()
{
    scanf("%s%s",A+1,B+1);
    n=strlen(A+1);m=strlen(B+1);
    p[1]=0;
    int j=0;
    for(int i=2;i<=m;i++)
     {
         while(j>0&&B[j+1]!=B[i])j=p[j];
         if(B[j+1]==B[i])j++;
         p[i]=j;
     }
    j=0;
    for(int i=1;i<=n;i++)
     {
         while(j>0&&B[j+1]!=A[i])j=p[j];
         if(B[j+1]==A[i])j++;
         if(j==m)
          {
              printf("%d\\n",i-j+1);
              j=p[j];
         }
     }
    for(int i=1;i<m;i++)printf("%d ",p[i]);
    printf("%d",p[m]);
    return 0;
}
View Code

 

以上是关于洛谷3375 KMP字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P3375 [模板]KMP字符串匹配

洛谷 P3375 模板KMP字符串匹配 || HDU 1686 Oulipo || kmp

[洛谷3375]模板KMP字符串匹配

洛谷—— P3375 模板KMP字符串匹配

洛谷-P3375 模板KMP字符串匹配

洛谷P3375模板KMP字符串匹配