问题 B: 可重叠子串 (Ver. I)
时间限制: 1 Sec 内存限制: 128 MB
提交: 154 解决: 71
[提交][状态][讨论版]
题目描述
给定一个字符串(模式串)和一些待查找的字符串,求每个待查找字符串在模式串中出现的次数(可重叠)
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio程序中若include多过一个头文件,不看代码,作0分处理
输入
测试数据有多组(测试组数 <= 5),
第一行包括一个字符串P,长度不超过105,且非空串
第二行包括一个整数N,代表待查找的字符串数量 (1 <= N <= 5)
接下来的N行,每一行包括一个待查找的字符串,其长度不超过50,且非空串
输出
对于每组测试数据,
输出每个待查找字符串出现的次数,
具体输出见样例
样例输入
aabbcc
3
aa
bb
cc
ababab
1
aba
样例输出
aa:1
bb:1
cc:1
aba:2
#include<iostream>
using namespace std;
int main()
{
string mode,str;
int num,t,k,i,u,f,j;
while(cin>>mode) {
cin >> t;
while(t--)
{
cin>>str;
string op[100000];
k=mode.length();
f=str.length();
num=0;
int num1;
j=0;
int e=0;
for(i=0;i<k;i++)
{
if(i+f<=k)
op[e++]=mode.substr(i,f);
}
num=0;
for(i=0;i<e;i++)
{
if(op[i]==str)
num++;
}
cout<<str<<":"<<num<<endl;
}
}
}