#include<bits/stdc++.h>
using namespace std;
int next[1005];
int kmp(char *a,char *b)
{
//a,b start from 1
int mx=0;
int la=strlen(a),lb=strlen(b);
int j=0;
for(int i=2;i<=lb;i++)
{
while(j>0&&b[j+1]!=b[i]) j=next[j];
if(b[j+1]==b[i]) j++;
next[i]=j;
}
j=0;
for(int i=1;i<=la;i++)
{
while(j>0&&b[j+1]!=a[i]) j=next[j];
if(b[j+1]==a[i]) j++;
mx=max(mx,j);
if(j==lb) return j;
}
return mx;
}
int main()
{
char a[]=" sadfasfas";char b[]=" sad";
int ans=kmp(a,b);
printf("%d\n",ans);
}
简单KMP
最新推荐文章于 2022-06-02 15:18:30 发布