问题:
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'
的索引,并找到在每个START
之后出现的'KICK'
的数量。
我得到的答案是错误的,我不知道我缺少哪些边缘情况。
代码如下:
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))
答案 0 :(得分:0)
这是我的代码:
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))
您并未考虑所有可能性。该代码仅显示了踢和启动发生了多少时间
答案 1 :(得分:0)
最后,我找到了代码遗漏的情况。
re.finditer()只能计数不重叠个匹配项,因此,像'KICKICK'这样的字符串将仅对KICK计数1次而不是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.