查找第一个不同的字符串

时间:2018-08-21 19:05:45

标签: string

我正在接受实习面试。面试官问了以下问题。

给出一个字符串流,找到第一个不同的字符串(在流中不重复)。

例如:“ abc”,“ xyz”,“ abcd”,“ abc”

ans是“ abc”,“ abc”,“ abc”,“ xyz”

我告诉了使用map和set的方法,但是假设String的哈希值是在O(1)中计算的,则时间复杂度为O(nlogn)。他不断强调做得更好,并告诉我们预期的复杂度为O(n)。我无法提出解决方案,但被拒绝了。请帮我解决问题。

1 个答案:

答案 0 :(得分:1)

可以通过特里和队列来解决。

for string in text:
    if string not in trie:
        insert_in_trie(string)
        insert_in_queue(string)
    else:
        if not queue.empty():
            queue.pop()

    if queue.empty():
        print("No distinct character")
    else:
        print(queue.front())

总体复杂度将为O(字符串的总长度),因为在队列和trie中的插入,删除和窥视将为O(字符串的长度)。