我正在接受实习面试。面试官问了以下问题。
给出一个字符串流,找到第一个不同的字符串(在流中不重复)。
例如:“ abc”,“ xyz”,“ abcd”,“ abc”
ans是“ abc”,“ abc”,“ abc”,“ xyz”
我告诉了使用map和set的方法,但是假设String的哈希值是在O(1)中计算的,则时间复杂度为O(nlogn)。他不断强调做得更好,并告诉我们预期的复杂度为O(n)。我无法提出解决方案,但被拒绝了。请帮我解决问题。
答案 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(字符串的长度)。