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. 样例输入
-
31110011101101011100100100100011010110100010101011
样例输出 -
303
1 #include
2 #include 3 #include 4 using namespace std; 5 int main(){ 6 int test, j, i; 7 string a, b; 8 int n; 9 cin >> test;10 while(test--){11 n = 0;12 cin >> a >> b;13 int len_a = a.length(), len_b = b.length();14 for(i = 0; i < len_b; i++){15 int k = i;16 for(j = 0; j < len_a; k++,j++){17 if(b[k] != a[j])18 break;19 }20 if(j == len_a)21 n++;22 }23 cout << n << endl;24 }25 return 0;26 } 上面是直接遍历。
以下代码利用find()函数
1 #include
2 #include 3 using namespace std; 4 5 int main(){ 6 int t; 7 string a, b; 8 cin >> t; 9 10 while(t--){11 cin >> a >> b;12 int n = 0;13 int index = b.find(a, 0);//返回从0开始找到子串在串中的位置下标14 while(index != b.npos){ //npos表示不存在15 n++;16 index = b.find(a, index + 1);17 }18 cout << n << endl;19 }20 21 return 0;22 }