查找列表中最后一个唯一的字符串

问题描述 投票:0回答:1

我正在 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']))  # It should print: 'mango'
print(find_unique_string(['hello', 'world', 'hello']))  # It should print: 'world'
print(find_unique_string(['hello', 'world', 'hello', 'world']))  # It should print: ''
print(find_unique_string([]))  # It should print: ''
print(find_unique_string(['apple', 'banana', 'apple', 'kiwi', 'banana', 'kiwi'])) # it should print ''

CodeSignal AI 不接受我的代码作为解决方案,并报告它不正确,但它无法提供我的代码结果错误的任何情况。

现在我的问题:

谁是对的?我还是 CodeSignal AI?

如果我是对的,我如何向 CodeSignal AI 证明我是对的,以便我可以通过测试并进入下一个测试?

如果 AI 是正确的,你能给我一个示例测试用例,它会破坏我的代码并且不会生成预期的输出吗?

注:

我不希望你编写一个有两组的解决方案,一组用于看到,一组用于重复,因为这是人工智能期望的结果(我认为),但我想知道我的代码是否正确以及是否正确是,如何证明是,或者你有一个测试用例来证明我的代码是错误的。

python algorithm
1个回答
0
投票

一种选择是分两步完成此操作。 首先,使用

Counter
查找每个列表条目的计数。 然后,使用列表理解来过滤掉任何多次出现的列表元素。

from collections import Counter

inp = ['apple', 'banana', 'apple', 'mango', 'banana']
counts = Counter(inp)
u_list = [item for item in inp if count[item] == 1]
print(u_list[-1])
© www.soinside.com 2019 - 2024. All rights reserved.