面试题

#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

posted @ 2018-10-22 20:14  The_kat  阅读(99)  评论(0编辑  收藏  举报