列表最后唯一字符串检测代码的正确性验证及问题排查请求
列表最后唯一字符串检测代码的正确性验证及问题排查请求
最近我在CodeSignal上刷题巩固编程知识,碰到了这么一道题目:
假设你有一个单词列表,比如
['apple', 'banana', 'apple', 'mango', 'banana'],每个单词可以重复任意次数。把这个列表想象成太空水果工厂的传送带,你的任务是找出传送带上最后一个不重复的水果——也就是没有出现过第二次的那个。如果所有水果都重复出现过,那就没有唯一水果,函数应该返回空字符串''。函数的输入是一个字符串列表(传送带的水果),字符串可以是任意单词,不一定是水果名,列表长度也没有限制,甚至可能是空列表(空传送带的情况)。输出需要返回列表中最后一个唯一的字符串,如果没有则返回空字符串。
解题要求使用集合,因为集合的成员检测效率很高,适合跟踪已见过的元素和重复元素。
我给出的解决方案如下:
def find_unique_string(words): last_uniq = '' seen = set() for w in words: if last_uniq == w: last_uniq = '' if w not in seen: last_uniq = w seen.add(w) return last_uniq
我自己测试了几个用例,结果都符合预期:
print(find_unique_string(['apple', 'banana', 'apple', 'mango', 'banana'])) # 预期输出: 'mango' print(find_unique_string(['hello', 'world', 'hello'])) # 预期输出: 'world' print(find_unique_string(['hello', 'world', 'hello', 'world'])) # 预期输出: '' print(find_unique_string([])) # 预期输出: '' print(find_unique_string(['apple', 'banana', 'apple', 'kiwi', 'banana', 'kiwi'])) # 预期输出: ''
但CodeSignal的AI却不接受我的代码,判定它不正确,又不给出发错误的测试用例。
现在我想请教几个问题:
- 到底是我的代码正确,还是CodeSignal的AI判定有误?
- 如果我的代码是正确的,我该怎么证明给CodeSignal的AI看,从而通过测试进入下一题?
- 如果AI的判定是对的,能不能提供一个能让我代码出错的测试用例,指出我的代码问题所在?
注意:
我不需要那种使用两个集合(一个存已见过元素、一个存重复元素)的解决方案——我猜那是AI期望的写法,但我只想确认自己的代码是否正确,如果正确该如何证明,如果错误需要对应的测试用例来验证。
备注:内容来源于stack exchange,提问作者mans
相关产品推荐
相关产品推荐

