您的位置:首页 > 其它

hihocoder KMP算法

2017-04-01 12:44 190 查看
思路:

KMP模板。

实现:

1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <iostream>
5 #include <string>
6 using namespace std;
7
8 int f[10005];
9
10 void getfill(string s)
11 {
12     memset(f, 0, sizeof(f));
13     for(int i = 1; i < s.size(); i++)
14     {
15         int j = f[i];
16         while(j && s[i] != s[j])
17             j = f[j];
18         f[i+1] = (s[i] == s[j]) ? j+1 : 0;
19     }
20 }
21
22 int find(string a, string s)
23 {
24     int ans = 0;
25     getfill(s);
26     int j = 0;
27     for(int i = 0; i < a.size(); i++)
28     {
29         while(j && a[i] != s[j])
30             j = f[j];
31         if(a[i] == s[j])
32             j ++;
33         if(j == s.size())
34         {
35             ans ++;
36         }
37     }
38     return ans;
39 }
40
41 int main()
42 {
43     int n;
44     cin >> n;
45     string a, b;
46     for(int i = 0; i < n; i++)
47     {
48         cin >> a >> b;
49         cout << find(b, a) << endl;
50     }
51     return 0;
52 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: