📜  门| GATE-CS-2007 |第 41 题(1)

📅  最后修改于: 2023-12-03 15:12:41.719000             🧑  作者: Mango

GATE-CS-2007 Question 41

题目描述

编写一个程序,该程序计算一个字符串中出现的子字符串的数量,并且这些子字符串的长度为k。子字符串可以重叠。

输入格式

第一行包含一个整数t,表示测试用例的数量。 每个测试用例包含两行,第一行包含一个字符串s,第二行包含一个整数k。

输出格式

对于每个测试用例,输出一个新行包含s中长度为k的子字符串的数量。

示例输入
2
abcdcdc
2
abcdabcd
3
示例输出
2
2
解题思路

题目要求计算一个字符串中长度为k的子字符串出现的次数。因为子字符串可以重叠出现,所以对于字符串中的每个长度为k的子串,都需要判断是否与目标子串相同,如果相同则计数器加1。 本题的算法时间复杂度为O(n-k+1),其中n为字符串的长度。

代码实现
t = int(input())
while t > 0:
    s = input().strip()
    k = int(input().strip())
    count = 0
    for i in range(len(s) - k + 1):
        if s[i:i + k] == s[:k]:
            count += 1
    print(count)
    t -= 1
代码说明
  1. 第一行输入测试用例数量t,表示接下来有t个测试用例。
  2. 对于每个测试用例,分别输入字符串s和整数k,并初始化计数器count为0。
  3. 使用for循环遍历字符串s中所有长度为k的子串,并判断是否与目标子串相同,如果相同则计数器加1。
  4. 输出计数器count的值,即为字符串s中长度为k的子字符串出现的次数。
  5. 将t减1,继续执行下一个测试用例,直到所有测试用例运行完毕。