You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HackerRank minion游戏Python嵌套循环代码运行超时优化求助

问题分析
  • 原代码时间复杂度过高,最坏情况达到O(n³):第一层遍历起始索引,第二层遍历结束索引生成子串(已达O(n²)量级),后续还遍历整个字符串统计当前子串的出现次数,额外多了O(n)的开销,当输入字符串长度达到数千级别时,必然触发超时。
  • 逻辑冗余:引入集合做子串去重、全局统计子串出现次数的操作完全不必要,没有抓住题目得分规则的本质。
核心优化思路

得分规则的底层逻辑可简化为:每个以元音开头的子串,无论内容是什么、是否和其他子串重复,只要存在就给Kevin加1分;同理辅音开头的子串给Stuart加1分。
对于索引为i的字符,以它为开头的子串总共有len(string) - i个,因此只需要遍历一次字符串,判断每个位置的字符属性,直接把对应子串数量加到对应玩家的分数中即可,时间复杂度直接降到O(n)。

优化后代码
def minion_game(string):
    vowels = {'A', 'E', 'I', 'O', 'U'}
    str_len = len(string)
    stuart, kevin = 0, 0
    for i in range(str_len):
        if string[i] in vowels:
            kevin += str_len - i
        else:
            stuart += str_len - i
    if stuart > kevin:
        print('Stuart', stuart)
    elif kevin > stuart:
        print('Kevin', kevin)
    else:
        print('Draw')
逻辑验证

以官方样例输入BANANA(长度为6)为例:

  • 索引0为B(辅音),加6 → stuart=6
  • 索引1为A(元音),加5 → kevin=5
  • 索引2为N(辅音),加4 → stuart=10
  • 索引3为A(元音),加3 → kevin=8
  • 索引4为N(辅音),加2 → stuart=12
  • 索引5为A(元音),加1 → kevin=9
    最终输出Stuart 12,和官方样例结果完全匹配。

内容的提问来源于stack exchange,提问作者Apurva Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 10:33:00