【发布时间】:2020-10-18 15:38:30
【问题描述】:
问题:
Ksenia 非常喜欢阅读,所以她每天都会从阅读一本 从她最喜欢的书中摘录,然后再开始她的其他部分 早上的例行公事。片段只是文本的子字符串。克塞尼亚 有点迷信,相信她的日子会很幸运,如果 她阅读的片段以字符串 KICK 开头,然后继续 0 个或多个字符,最终以字符串 START 结尾,甚至 如果整个片段没有意义。
给定书中的文字,计算不同幸运的数量 Ksenia 在书变老之前可以阅读的片段,她需要 再买一个。如果两个片段被认为是不同的 它们在文本中的不同位置开始或结束,即使 片段读取相同。另请注意,不同的幸运碎片可能 重叠。
输入:
输入的第一行给出了测试用例的数量T.T行 跟随,每个都包含一个由大写组成的单个字符串 S 仅限英文字母。
输出:
对于每个测试用例,输出一行包含 Case #x: y,其中 x 是 测试用例编号(从 1 开始),y 是 这个测试用例的文本中有不同的幸运片段。
限制:
内存限制:1 GB。 1 ≤ T ≤ 100。S 由大写英文组成 仅限字母。
测试集 1:
时间限制:20 秒。 1 ≤ |S| ≤ 1000。
测试集 2:
时间限制:40 秒。 1 ≤ |S| ≤ 105。
示例:
Input
3
AKICKSTARTPROBLEMNAMEDKICKSTART
STARTUNLUCKYKICK
KICKXKICKXSTARTXKICKXSTART
Output
Case #1: 3
Case #2: 0
Case #3: 5
我尝试使用 Python 解决它。我尝试使用的逻辑是查找子字符串'KICK' 和子字符串'START' 的索引,并查找每个'KICK' 之后出现的START 的数量。
我得到了错误的答案我不明白我错过了什么边缘情况。
代码如下:
import re
t = int(input())
for i in range(t):
text = input()
matches = 0
temp1 = [m.start() for m in re.finditer('KICK',text)]
temp2 = [m.start() for m in re.finditer('START',text)]
if len(temp1) == 0 or len(temp2) == 0:
matches = 0
else:
for ele in temp1:
for x in temp2:
if(x > ele):
matches = matches + 1
print("Case "+"#"+str(i+1)+": "+str(matches))
【问题讨论】:
-
阅读作业必须被视为残忍和不寻常的惩罚。
标签: python python-3.x