串的模式匹配算法-KMP算法
最简单的算法就不说了,直接上KMP,时间复杂度是 O(n+m)。
1.next数组
2.kmp过程
这一段和next数组的构建很相似。
#include<iostream>
#include<cstring>
using namespace std;
int next[105];
void next_int(string t){
int lent=t.length();
int j=1,i=0;
while(j<lent)
(t[j]==t[i])?(next[j+1]=++i,j++):((i==0)?(next[++j]=0):i=next[i]);
// for(int i=0;i<lent;i++){
// cout<<next[i];
// }
}
int kmp(string s,string t){
int lens=s.length(),lent=t.length();
int i=0,j=0;
while(i<lens){
(t[j]==s[i])?(j++,i++):((j==0)?(i++):j=next[j]);
if(j==lent) return i-lent+1;
}
}
int main(){
string s,t;
cin>>s>>t;
next_int(t);
int i=kmp(s,t);
cout<<i<<endl;
return 0;
}