KMP_[模板]

 

题目:P3375 【模板】KMP字符串匹配

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int next[1000000];
int i,j,la,lb;
string a,b;
void getnext()
{
    int l,j=-1,k=0;
    next[0]=-1;
    while (k<lb)
    {
        if (j<0 || b[k]==b[j])
        {
            j++;k++;
            next[k]=j;
        }
        else
          j=next[j];
    }
}
int main()
{
  int x=-1,y=-1;
  cin>>a>>b; 
  la=a.size(); lb=b.size();
  getnext();
  int j=0,k=0;
  while (k<la)
    {
        if ((j<0 || a[k]==b[j])&&j!=lb)
        {
            j++;k++;
            if (j==lb) cout<<k-lb+1<<endl;
         }
        else
          j=next[j];
    }
  for (i=1;i<=lb;i++)
   printf("%d ",next[i]);
   printf("\n");    
} 

 

posted @ 2020-11-06 21:07  Li_yxxx  阅读(52)  评论(0)    收藏  举报