#include<stdio.h>
#include<string>
#include<vector>
vector<int> KMP(string text,string pattern){
n=pattern.size();
vector<int>next(n+1,0);
for(int i=1;i<n;i++)
{
j=i;
while(j>0){
j=next[i];
if(pattern[i]==pattern[j])
{
next[i+1]=j+1;
break;
}
}
vector<int>positions;
m=text.size();
for(int i=0,j=0;i<m;i++)
{
if(text[i]==pattern[j]) j++;
else{
while(j>0){
j=next[j];
if(text[i]==pattern[j])
{
j++;
break;
}
}
}
if(j==n) positions.pushback(i-n+1);
}
return positions;
}
kmp
最新推荐文章于 2023-01-23 18:57:44 发布