首页 > 其他 > 详细

nyoj 5 Binary String Matching(kmp)

时间:2015-10-27 20:16:30      阅读:241      评论:0      收藏:0      [点我收藏+]

Binary String Matching

 
 
描述
Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is ‘11’, you should output 3, because the pattern A appeared at the posit
 
输入
The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And it is guaranteed that B is always longer than A.
输出
For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
样例输入
3
11
1001110110
101
110010010010001
1010
110100010101011 
样例输出
3
0
3 

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int next[105];
 6 
 7 void getnext(char *s)
 8 {
 9     int len=strlen(s);
10     int i=0,j=-1;
11     next[i]=j;
12     while(i<len)
13     {
14         if(j==-1||s[i]==s[j])
15         {
16             i++;
17             j++;
18             next[i]=j;
19         }
20         else
21             j=next[j];
22     }
23 }
24 
25 int kmp(char *s1,char *s2)
26 {
27     int res=0;
28     int len1=strlen(s1);
29     int len2=strlen(s2);
30     getnext(s2);
31     int i=0,j=0;
32     while(i<len1)
33     {
34         if(j==-1||s1[i]==s2[j])
35         {
36             i++;
37             j++;
38             if(j==len2)
39                 res++;
40         }
41         else
42             j=next[j];
43     }
44     return res;
45 }
46 
47 int main()
48 {
49     int T;
50     char sub[15],s[1005];
51     scanf("%d",&T);
52     while(T--)
53     {
54         scanf("%s",sub);
55         scanf("%s",s);
56         getnext(sub);
57         int ans=kmp(s,sub);
58         printf("%d\n",ans);
59     }
60     return 0;
61 }

 

nyoj 5 Binary String Matching(kmp)

原文:http://www.cnblogs.com/homura/p/4915168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!