kmp
kmp
KMP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+7;
int nx[N];
int main()
{
string s1,s2;
cin>>s1>>s2;
for(int i=1,j=0;s2[i];i++)
{
while(j&&s2[i]!=s2[j])j=nx[j-1];
if(s2[i]==s2[j])j++;
nx[i]=j;
}
int ans=0;
for(int i=0,j=0;s1[i];i++)
{
while(s1[i]!=s2[j]&&j)j=nx[j-1];
if(s1[i]==s2[j])j++;
// cout<<i<<" "<<j<<endl;
if(j==s2.size())ans++;
}
cout<<ans;
return 0;
}
本文由作者按照 CC BY 4.0 进行授权