使用嵌套循环优化 python 代码

Optimization of python code with nested loops

这是一个 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')

刚刚看了题源

这可能是最短的方法。

def minion_game(string):
    vowels = ['A', 'E', 'I', 'O', 'U']
    kevin = 0
    stuart = 0
    for i in range(len(string)):
        if s[i] in vowels:
            kevin += len(s)-i
        else:
            stuart += len(s)-i

    if stuart > kevin:
        print('Stuart '+ str(stuart))
    elif kevin > stuart:
        print('Kevin ' + str(kevin))
    else:
        print('Draw')

s = input()
minion_game(s)

这部分遍历输入字符串中的每个字母并检查它是否是元音。

for i in range(len(string)):
    if s[i] in vowels:

HackerRank 会自动为您提供以下内容,如果您实际检查过,那就是声明的地方。

s = input()
minion_game(s)