【发布时间】:2021-07-25 08:59:18
【问题描述】:
这是一个hackerrank问题,我在这里有点菜鸟。 5/15 测试用例正在工作,但是当要分析的字符串太大时,测试用例由于超时而被终止。任何指导将不胜感激。
问题 - 给两个玩家相同的字符串,. 两个玩家都必须使用字符串的字母来创建子字符串。 斯图尔特必须造以辅音开头的单词。 凯文必须以元音开头的单词。 如果一个子串出现x次,则构成+x分。 当两个玩家都完成所有可能的子字符串时,游戏结束。
def minion_game(string):
vowels = {'A', 'E', 'I', 'O', 'U'}
strlen = len(string)
Stuart, Kevin = 0, 0
words = set([])
for i in range(strlen):
for j in range(i, strlen):
temp_word = string[i:j + 1]
temp_word_length = j-i+1
if temp_word not in words:
words.add(temp_word)
no_of_search = strlen - temp_word_length + 1
score = sum(temp_word == string[x : x + temp_word_length] for x in range(no_of_search))
if string[i] in vowels:
Kevin += score
else:
Stuart += score
if Stuart > Kevin:
print('Stuart', Stuart)
elif Kevin > Stuart:
print('Kevin', Kevin)
else:
print('Draw')
【问题讨论】:
-
你需要想出一个不需要那么多循环的算法。
-
在不知道这应该做什么的情况下,我们很难回答。
-
一个明显的改进是使用集合而不是
words的列表。 -
不要继续重新创建
string[i:j + 1]。把它放在一个变量中并使用它。 -
事实上,你确实有一个变量:
temp_word。早点分配它并使用它。
标签: python string list optimization nested-loops