厦大C语言上机 1381 不重叠子串数

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


来源

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值