面试题
#include<bits/stdc++.h>
using namespace std;
string a="abcabc",b="abcabcabc";
int f[10];
void getfail(){
int n=a.size();
f[0]=f[1]=0;
int j=0;
for(int i=1;i<n;++i)
{
j=f[i];
while(j!=0&&a[i]!=a[j])j=f[j];
f[i+1]=a[i]==a[j]?j+1:0;
}
f[n+1]=f[n];
}
int get(){
int ans=0;
int n=b.size();
int j=0;
for(int i=0;i<n;++i)
{
while(j!=0&&b[i]!=a[j])j=f[j];
if(b[i]==a[j])j++;
if(j==a.size()){
ans++;
j=f[j];
}
}
return ans;
}
int main()
{
memset(f,0,sizeof(f));
getfail();
cout<<get()<<endl;
return 0;
}
输出:: 2