【问题标题】:Optimization of python code with nested loops使用嵌套循环优化python代码
【发布时间】: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


【解决方案1】:

我只是看了问题来源。

这可能是你能做到的最短的方法。

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)

【讨论】:

  • 好吧,这行得通,但我不明白。你能解释一下s[i] 位吗?什么是s?我们似乎没有声明它。
  • s 是输入字符串,如果您查看hackerrank 的底部,您会看到s = input() 所以这会遍历字符串的每个字母并检查该字母是否在元音中。 @ApurvaGaurav
  • @AndyKnight 很好,确实如此。我也不明白。
  • 谢谢,除了非常有效的算法方法外,我还通过您的解决方案学到了一些关于 python 的非常重要的东西。
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2017-05-28
  • 2021-12-22
  • 2021-01-21
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多