KMP算法在计算字符串匹配时非常重要,其核心在于构造next数组,如下程序可以进行计算,在next数组的构造中,贯穿的就是递推的思想。
#include<iostream>
#include<cstring>
using namespace std;
int next[100];
void get_next(string t){
int j = 1;
int k = 0;
next[1] = 0;
while(j<t.length()){
if (k==0||t[j-1]==t[k-1])
next[++j] = ++k;
else
k =next[k];
}
for(int i=1;i<=t.length();i++){
cout<<next[i]<<" ";
}
}
void kmp(string s ,string t){
get_next(t);
int i = 0,j = 1;
int slen = s.length();
int tlen = t.length();
while(i<=slen&&j<=tlen){
if(s[i-1] = t[j-1]){
i++;
j++;
}
else {
j = next[i];
}
}
}
int main(){
string s,t;
cin>>s>>t;
kmp(s,t);
return 0;
}