如何通过使用列表理解或在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)
如果您请解释该程序的解决方案,因为我是编程新手,我将不胜感激。
答案 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