Binary String Matching

来源:互联网 发布:mac连接电视 编辑:程序博客网 时间:2024/06/06 03:46

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
来源
网络
上传者
naonao
循环AC

#include <iostream>#include <cstring> #include <string>#include <cstdlib>#include <algorithm>#include <cstdio>using namespace std;#define mem(a) memset(a, 0, sizeof(a))char a[100], b[1100];int main() {    int n;    cin >> n;    while (n --) {        mem(a); mem(b);        cin >> a >> b;        int res = 0, p1 = strlen(a), p2 = strlen(b);        int num = 0;        while (num <= p2-p1) {            int flag = 1;            for (int i = num, j = 0; j<p1; j++,i++) {                if (a[j] != b[i])   flag = 0;            }            if (flag)   res ++ ;            num ++ ;            //cout << res << endl;        }        cout << res << endl;    }    return 0;}

标程:#include中的find()函数的应用。另外,m!=string::npos 意思是:m不等于字符串的尾部。

#include<iostream>#include<string>using namespace std;int main(){    string s1,s2;    int n;    cin>>n;    while(n--)    {        cin>>s1>>s2;        unsigned int m=s2.find(s1,0);        int num=0;        while(m!=string::npos)        {            num++;            m=s2.find(s1,m+1);        }        cout<<num<<endl;    }}        
0 0
原创粉丝点击