#include <cstdio>
#include <string>
using namespace std;
int sonString(char* stringSon,char* string){
int *p=(int*)malloc(strlen(stringSon)*sizeof(int));
int Amount=strlen(stringSon);
int i,j;
for(i=0;i!=Amount;i++){
for(j=i-1;j!=-1;j--){
if(stringSon[i]==stringSon[j])break;
}
*(p+i)=j;
}
i=0;j=0;
for(i=0;i<strlen(string);i++){
if(stringSon[j]==string[i]){
j++;
if(j==Amount)return true;
}
else{
if(j!=0){
j=*(p+j-1)+1;
}
}
}
return false;
}
int main(){
char *a="abcabcdabcd";
char *b="ccccccccccabcdabcabcdabcabcdabcabcdabcd";
printf("%d\n",sonString(a,b));
return 0;
}
这是一种找子字符串的算法,也就是在一个长字符串里搜索是否有短字符串的方法,中心思想大概就是先将想要搜索的字符串进行预处理,用数组记录字符串的特征,然后用长字符串进行失败匹配时就可以优化它的速度。
以上是我写的KMP算法