#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int dp[maxn][256];
void kmp(string pat){
int x=0;
for(int i=0;i<pat.size();++i){
for(int j=0;j<256;++j)
dp[i][j]=dp[x][j];
dp[i][pat[i]]=i+1;
x=dp[x][pat[i]];
}
}
int search(string a,int m){
int j=0;
for(int i=0;i<a.size();++i){
j=dp[i][a[i]];
if(j==m)
return 1;
}
return -1;
}
int main(){
string a="abbab",b="ab";
kmp(b);
cout << search(a,b.size());
return 0;
}
二维KMP模板
最新推荐文章于 2022-08-25 22:33:48 发布