#include<bits/stdc++.h>
using namespace std;
int next[100];
string father,son;
void getnext(){
next[0]=-1;
int j=0,k=-1;
while(j<son.size()){
if(k==-1||son[j]==son[k])next[++j]=++k;
else k=next[k];
}
}
int kmp(){
getnext();
int i=0,j=0;
while(i<(int)father.size()&&j<(int)son.size()){//这里一定要将size()强转成int类型,不然就出错了
if(j==-1||father[i]==son[j])i++,j++;
else j=next[j];
}
if(j<(int)son.size())return -1;
return i-j;
}
int main(){
cin>>father>>son;
cout<<kmp()<<endl;
cout<<(0<father.size())<<endl;
cout<<(-1<father.size())<<endl;//居然输出0,-1明明比father.size()小啊!
cout<<(-1<(int)father.size());//size用int强转一下
}
kmp
最新推荐文章于 2025-03-16 21:24:27 发布
本文详细介绍了KMP算法的基本原理及其实现过程。通过具体的代码示例,展示了如何使用KMP算法进行高效的字符串匹配,并解释了关键部分如next数组的作用及计算方法。
9万+

被折叠的 条评论
为什么被折叠?



