CodeSignal隐藏测试无法通过:首个非重复字符Python解法问题
问题原因分析
- 现有解法逻辑正确性无问题,小数据量场景下可正常返回结果,无法通过隐藏用例的核心原因为时间复杂度过高:
- 每次调用
s.count(i)都会全量遍历一次字符串统计字符出现次数,单次调用时间复杂度为O(n) - 叠加外层的字符串遍历,整体时间复杂度达到O(n²),当隐藏测试用例为长度过万的长字符串时,会触发超时判定,导致用例执行失败
- 每次调用
优化方案
采用两次遍历+哈希表统计的方案,将整体时间复杂度降到O(n),可适配所有长度的测试用例,参考实现如下:
def firstNotRepeatingCharacter(s): char_count = {} # 首次遍历统计所有字符出现次数 for c in s: char_count[c] = char_count.get(c, 0) + 1 # 二次遍历找第一个出现次数为1的字符 for c in s: if char_count[c] == 1: return c return "_"
内容的提问来源于stack exchange,提问作者peteripp
相关产品推荐
相关产品推荐

