1381.不重叠子串数
时间限制: 1000 MS 内存限制: 65536 K
提交数: 1085 (0 users) 通过数: 246 (227 users)
问题描述
小明又找到一道难一点的题:给出两个字符串t和s,求出t中能找出几个不重叠的s串。比如t="tobeornottobe",s="to",则t中有2个不重叠的"to"串。
输入格式
第一行是一个正整数n,n<=10,表示接下来有几个测试数据
接下来的每组数据有两个字符串t和s,都只包含字母,且长度不超过100000
输出格式
对每组数据输出对应的答案
样例输入
2
vvvvvvvvvvu
vvvu
tobeornottobe
to
样例输出
1
2
来源
时间限制: 1000 MS 内存限制: 65536 K
提交数: 1085 (0 users) 通过数: 246 (227 users)
问题描述
小明又找到一道难一点的题:给出两个字符串t和s,求出t中能找出几个不重叠的s串。比如t="tobeornottobe",s="to",则t中有2个不重叠的"to"串。
输入格式
第一行是一个正整数n,n<=10,表示接下来有几个测试数据
接下来的每组数据有两个字符串t和s,都只包含字母,且长度不超过100000
输出格式
对每组数据输出对应的答案
样例输入
2
vvvvvvvvvvu
vvvu
tobeornottobe
to
样例输出
1
2
来源
xmu
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100005
int main()
{
int n;
char t[MAX_SIZE] = { 0 };
char s[MAX_SIZE] = { 0 };
int ptr_t, ptr_s, ptr_t_temp;
int len_t, len_s;
int is_matched, matched_count;
scanf("%d", &n);
while (n--)
{
scanf("%s", t);
scanf("%s", s);
len_t = (int)strlen(t);
len_s = (int)strlen(s);
matched_count = 0;
for (ptr_t = 0; ptr_t < len_t; )
{
is_matched = 1;
for (ptr_t_temp = ptr_t, ptr_s = 0; ptr_t_temp < len_t && ptr_s < len_s; ++ptr_t_temp, ++ptr_s)
{
if (t[ptr_t_temp] != s[ptr_s])
{
is_matched = 0;
break;
}
}
if (is_matched && ptr_s == len_s)
{
matched_count++;
ptr_t += len_s;
}
else
ptr_t++;
}
printf("%d\n", matched_count);
}
return 0;
}