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
/** 题目大意: 求一个串的子串,再判断该串与题目所给的串是否相同 分析: 通过C++提供的substr函数求子串 substr用法:str2 = str1.substr (index, length) **/
C/C++代码实现:
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <cstdio> #include <stack> using namespace std; int N, len1, len2, cnt; string s1, s2, s3; int main () { scanf ("%d", &N); while (N --) { cnt = 0; cin >>s1 >>s2; len1 = s1.size(); len2 = s2.size(); for (int i = 0; i < len2 - len1 + 1; ++ i) { s3 = s2.substr(i, len1); if (s1 == s3) ++ cnt; } printf ("%d\n", cnt); } return 0; }
python实现(AC):
1 T = int(input()) 2 while T: 3 T -= 1 4 a = input() 5 b = input() 6 a_len = len(a) 7 b_len = len(b) 8 ans = 0 9 for i in range(0, b_len - a_len + 1): 10 flag = 1 11 for j in range(0, a_len): 12 if b[i+j] != a[j]: 13 flag = 0 14 break 15 if flag: 16 ans += 1 17 print(ans)