Python 第G轮-启动2020问题启动错误答案

Python 第G轮-启动2020问题启动错误答案,python,python-3.x,Python,Python 3.x,问题: 克塞尼亚非常喜欢读书,所以她每天都以读一本书作为开始 从她最喜欢的书中提取片段,然后开始她的其他部分 早上的例行公事。片段只是文本的一个子字符串。克塞尼亚 有点迷信,她相信如果 她读到的片段以踢弦开始,然后继续 0个或更多字符,最终以字符串开头结束,甚至 如果整个片段没有什么意义 根据书中的文字,数一数不同的幸运数字 克塞尼亚在书变老之前可以阅读的片段,她需要 我想再买一个。两个片段被认为是不同的,如果 它们在文本中的不同位置开始或结束,即使 碎片读起来也一样。还请注意,不同的幸运碎片可

问题:

克塞尼亚非常喜欢读书,所以她每天都以读一本书作为开始 从她最喜欢的书中提取片段,然后开始她的其他部分 早上的例行公事。片段只是文本的一个子字符串。克塞尼亚 有点迷信,她相信如果 她读到的片段以踢弦开始,然后继续 0个或更多字符,最终以字符串开头结束,甚至 如果整个片段没有什么意义

根据书中的文字,数一数不同的幸运数字 克塞尼亚在书变老之前可以阅读的片段,她需要 我想再买一个。两个片段被认为是不同的,如果 它们在文本中的不同位置开始或结束,即使 碎片读起来也一样。还请注意,不同的幸运碎片可能 重叠

输入:

输入的第一行给出了测试用例的数量 follow,每个包含一个由大写字母组成的字符串S 只有英文字母

输出:

对于每个测试用例,输出一行包含用例#x:y,其中x是 测试用例号(从1开始),y是 本测试用例文本中的不同幸运片段

限制:

内存限制:1 GB。1.≤ T≤ 100S由大写英语组成 只有信件

测试集1:

时限:20秒。 1.≤ |S|≤ 一千

测试集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))
这是我的密码:

t = int(input())
for x in range(t):
    s = input()
    ans = 0
    k = 0
    for i in range(len(s)-4):
        if s[i:i+4] == "KICK":
            k += 1
            
        if s[i:i+5] == "START" and k != 0:
            ans += k
    print("Case #{}: {}".format(x+1, ans))

你没有考虑所有的可能性。代码只显示了启动和启动发生的次数

最后我找到了代码未命中的案例

re.finditer()只能计算非重叠的匹配,因此像'KICKICK'这样的字符串将导致只计算KICK一次,而不是2次

re.finditer(pattern, string, flags=0)
Return an iterator yielding MatchObject instances over all non-overlapping matches for the RE pattern in string.The string is scanned left-to-right, and matches are returned in the order found. Empty matches are included in the result.

阅读作业必须算作残忍和不寻常的攻击。我试图做的是将所有KICK事件的起始索引存储在列表temp1和START in temp2中,然后从KICK中提取每个索引,找到所有在它之后的START事件,并增加计数。你的解决方案是正确的。你能帮我找出我的方法有什么问题吗?谢谢