有什么方法可以消除嵌套循环以防止时间执行错误

时间:2020-06-21 04:45:48

标签: python-3.x

如何通过使用列表理解或在python中使用itertools来提高代码效率,因为该程序会为大型输入数据集提供时间执行错误。

    n=0
    k=0
    v='AEIOU'
    for i in range(0,len(string)):
        for j in range(i+1,len(string)+1):
            a = string[i:j]
            #print(a)
            if (a[0] == 'A') or  (a[0] == 'E') or (a[0] == 'I') or (a[0] == 'O') or (a[0] == 'U'):
                n+= 1
            else:
                k+=1
    if n>k:
        print('Kevin'+' '+str(n))
    elif n<k:
        print('Stuart'+' '+str(k))
    else:
        print('Draw')

if __name__ == '__main__':
    s = input()
    minion_game(s)

请通过此链接检查问题 https://solution.programmingoneonone.com/2020/06/hackerrank-the-minion-game-problem-solution-python.html

如果您请解释该程序的解决方案,因为我是编程新手,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

基本上,您要做的是:

def isVowel(c):
  if c in ['A', 'E', 'I', 'O', 'U']:
     return True
  return False


Kevin=0
Stuart=0
for i in range(len(s)):  #s is the input string 
    a=len(s)-i
    if isVowel(s[i]):    
        Kevin+=a
    else :
        stuart+=a
#check who has scored more he is the winner.

之所以起作用,是因为假设有一个字符串BANANA:

B是辅音,因此我们必须包括所有以B开头的字符串。

B,BA,BAN ....所以我们将得到(n-indexOf(B))个字符串总数= stuart的6-0 = 6 pts 一个是元音 所有A = n-indexOf(A)= 6-1 = 5的字符串,因此凯文(Kevin)的得分为5分。

您无需显式检查当前子字符串出现在字符串中的次数,因为您将遍历所有子字符串。

例如,

凯文的总积分=

A在以下位置的得分:索引(1)+索引(3)+索引(5)

总点数=(6-1)+(6-3)+(6-5)= 9