4.4 编写输入两个字符串s和t,统计串s包含串t个数的算法
#include<iostream>
#define MaxSize 6
using namespace std;
int Next[MaxSize];
void GetNext(string t){
Next[0]=-1;
int i=0,j=-1;
int s=t.size();
while(i<s){
if(j==-1||t[i]==t[j]) Next[++i]=++j;
else j=Next[j];
}
}
int sum=0;//统计出现个数
int KMP(string s,string t){
int i=0,j=0;
int a=s.size(),b=t.size();
while(i<a&&j<b){
if(j==-1||s[i]==t[j]){
i++,j++;
}
else j=Next[j];//匹配失败
if(j==b){
j=0;
sum++;
}
}
return sum;
}
int main()
{
string s,t; cin>>s>>t;
GetNext(t);
KMP(s,t);
cout<<sum;//输出出现的次数
return 0;
}
//abccabccabdca ab
//3