码迷,mamicode.com
首页 > 其他好文 > 详细

kmp

时间:2018-07-18 21:44:59      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:name   strlen   next   names   pre   ios   ret   bsp   i++   

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 void kmp_pre(char x[], int m, int Next[])
 7 {
 8     int i, j;
 9     j = Next[0] = -1;
10     i = 0;
11     while (i < m)
12     {
13         int mark1=j,mark2=j;
14         while (-1 != j && x[i] != x[j]) mark1=j,j = Next[j],mark2 = j;
15         Next[++i] = ++j;
16         cout << "(" << i <<","<< mark1<<" " <<mark2 << " " << j << ")";
17     }
18     cout << endl;
19 }
20 int Next[10010];
21 int KMP_Count(char x[], int m, char y[], int n)
22 {
23     int i, j;
24     int ans = 0;
25     kmp_pre(x, m, Next);
26     for (int i = 0; i < m+1; i++)
27         cout << Next[i]<<" ";
28     cout << endl;
29     i = j = 0;
30     while (i < n)
31     {
32         while (-1 != j && y[i] != x[j]) j = Next[j];
33         i++; j++;
34         if (j >= m)
35         {
36             ans++;
37             j = Next[j];
38         }
39     }
40     return ans;
41 }
42 int main()
43 {
44     char a[100], b[100];
45     cin >> a >> b;
46     int lena = strlen(a), lenb = strlen(b);
47     cout << KMP_Count(a, lena, b, lenb) << endl;
48     return 0;
49 }

 

kmp

标签:name   strlen   next   names   pre   ios   ret   bsp   i++   

原文地址:https://www.cnblogs.com/kangdong/p/9332545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!