NYOJ 5 Binary String Matching
2015-01-12 21:57
260 查看
描述
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.
样例输入
样例输出
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
/*最初用的BF算法,后来又改成KMP算法,初次接触KMP算法,还不是太理解。 上代码*/ #include <stdio.h> #include <string.h> void GetNext(char *p,int *next) { int j = 0, k = -1; *next = -1; while(*(p+j)!='\0') { if(k==-1||*(p+j)==*(p+k)) { j++; k++; *(next+j)=k; } else k=*(next+k); } } int KMPMatch(char *a1, char *a2) { int next[11]; int i,j,num; i=j=num=0; GetNext(a1,next); while(*(a1+i)!='\0'&&*(a2+j)!='\0') { if(-1 == i || *(a1+i)==*(a2+j)) { ++i; ++j; } else { i=next[i]; } if(*(a1+i)=='\0') { ++num; j=j-i+1; i=0; } } return num; } int main() { int n; char a1[11], a2[1000]; scanf("%d",&n); getchar(); while(n--) { scanf("%s",a1); getchar(); scanf("%s",a2); getchar(); printf("%d\n",KMPMatch(a1,a2)); } return 0; }
相关文章推荐
- NYOJ 5Binary String Matching(带题目大意)
- nyoj5 Binary String Matching
- NYOJ-5-Binary String Matching
- NYOJ 5 Binary String Matching
- NYOJ 5 Binary String Matching
- NYOJ 5 Binary String Matching (kmp 字符串匹配)
- nyoj 5 Binary String Matching
- NYOJ 题目5 Binary String Matching(string类使用)
- nyoj5 Binary String Matching
- NYOJ 5 Binary String Matching
- 【NYOJ-5】 Binary String Matching
- NYOJ-5 Binary String Matching
- nyoj 5 Binary String Matching<水过>
- nyoj -5 Binary String Matching 【kmp】
- NYOJ Binary String Matching
- NYOJ5之Binary String Matching
- NYoj-Binary String Matching-BF算法
- nyoj 5:Binary String Matching
- NYOJ 题目5 Binary String Matching
- NYOJ NO.5 Binary String Matching