长测试用例超时,子字符串游戏

时间:2018-09-01 18:11:08

标签: python python-3.x

问题陈述如下

  

游戏规则

     

两个玩家都被赋予相同的字符串。两名球员都必须   子串使用字符串的字母。斯图尔特必须说话   从辅音开始。凯文必须以   元音。当两个玩家都使一切成为可能时,游戏结束   子字符串。

     

得分每次出现以下子串,球员可获得+1分   字符串。

     

例如:字符串= BANANA凯文的元音起始字= ANA在这里,   ANA在BANANA中发生两次。因此,凯文将获得2分。   您的任务是确定游戏的获胜者及其得分。

代码:

def minion_game(string):
    kevin,stuart=0,0
    for i in range(0,len(string)):
        for j in range(i,len(string)):
            if string[i:j+1][0]=='A' or string[i:j+1][0]=='E' or string[i:j+1][0]=='I' or string[i:j+1][0]=='O' or string[i:j+1][0]=='U':
                kevin=kevin+1
            else:
                stuart=stuart+1
    if kevin>stuart:
        print('Kevin',kevin)
    elif kevin<stuart:
        print('Stuart',stuart) 
    else:
        print('Draw')



s = input()
minion_game(s)

输入: Click here

预期输出: 斯图尔特7501500

输出: 由于超时而终止

2 个答案:

答案 0 :(得分:3)

这是我解决该问题的旧方法

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

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

诀窍是要意识到您不需要尝试所有组合。看到元音或辅音后,就可以确定当前字符串的剩余长度是剩余的,因此您只需添加许多点即可

例如,给定“香蕉”一词,我们看到一个B,我们立即知道{B,BA,BAN,BANA,BANAN,BANANA}都将给Stuart积分。无需继续检查

答案 1 :(得分:0)

def minion_game(string):

c=0
c1=0
v=('A','E','I','O','U')
for i in range(0,len(string)):
    sa=""
    if string[i] not in v:
        sa=sa+string[i]
        c=c+1
        for j in range(i,len(string)-1):
            sa=sa+string[i+1]
            c=c+1
            i=i+1
    else:
        sa=sa+string[i]
        c1=c1+1
        for j in range(i,len(string)-1):
            sa=sa+string[i+1]
            c1=c1+1
            i=i+1
if(c>c1):
    print('Stuart '+str(c))
elif(c1>c):
    print('Kevin '+str(c1))
elif(c1==c):
    print('Draw')