1. 程式人生 > >NYoj-Binary String Matching-BF演算法

NYoj-Binary String Matching-BF演算法

Binary String Matching

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3
描述
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演算法***********/ 
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXSTRLEN  1000
int main()
{
	char s[MAXSTRLEN+10];
	char t[11];
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s %s",t,s);
		int j=0,i=0;
	    int len_s=strlen(s);
	    int len_t=strlen(t);
	    int count=0;
	    while(i<=len_s)
	    {
	    	if(s[i]==t[j])
		    {
			   ++i;
			   ++j;
			   if(j==len_t)
			   { 
			      count++;
			      i=i-len_t+1;
			      j=0; 
			   }  
		    }
		    else
		    {
			   i=i-j+1;
			   j=0;
		    }
       }
       printf("%d\n",count);
	}
	
	return 0;
}