题目:
思路分析:
一个简单的字符串的单模匹配!kmp就行没必要上自动机
代码实现:
/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
* __----~~~~~~~~~~~------___
* . . ~~//====...... __--~ ~~
* -. \_|// |||\\ ~~~~~~::::... /~
* ___-==_ _-~o~ \/ ||| \\ _/~~-
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
* .~ .~ | \\ -_ / /- / || \ /
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
* ' ~-| /| |-~\~~ __--~~
* |-~~-_/ | | ~\_ _-~ /\
* / \ \__ \/~ \__
* _--~ _/ | .-~~____--~-/ ~~==.
* ((->/~ '.|||' -_| ~~-/ , . _||
* -_ ~\ ~~---l__i__i__i--~~_/
* _-~-__ ~) \--______________--~~
* //.-~~~-~_--~- |-------~~~~~~~~
* //.-~~~--\
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 神兽保佑 永无BUG
*/
//#include<bits/stdc++.h>
using namespace std;
const int NN=100;
string A,B;
int Next[NN];
int ans;
void getnext()
{
memset(Next,0,sizeof(Next));
Next[0]=-1;
Next[1]=0;//长度为1的字符串,设定next为0
int i=1,j;
int len=0;
while(i<B.length())
{
if(len==-1||B[i]==B[len])
{
len++;
i++;
Next[i]=len;
}
else len=Next[len];
}
// for(int i=0; i<B.length(); i++)
// printf("next[%d]:%d ",i,Next[i]);
// cout<<endl;
}
void KMP()
{
getnext();
int i=0,j=0;
bool cnt=0;
while(i<A.length())
{
//cout<<i<<" "<<j<<endl;
if(j==-1||A[i]==B[j])
{
i++,j++;
if(j>=B.length())
{
cnt=1;
int k1=i-B.length();
// cout<<"区间"<<k1<<" "<<i-1<<endl;
ans++;
j=0;
}
}
else j=Next[j];
}
// if(!cnt)cout<<"NO"<<endl;
cout<<ans;
}
int main()
{
// cin>>A>>B;
cin>>A;
B="edgnb";
KMP();
return 0;
}