【发布时间】:2023-03-10 06:51:01
【问题描述】:
我正在面试实习。面试官问了以下问题。
给定一个字符串流,找到第一个不同的字符串(流中不重复)。
例如:"abc","xyz","abcd","abc"
ans 是 "abc","abc","abc","xyz"
我用map和sets告诉了这个方法,但是时间复杂度是O(nlogn),假设String的哈希值是O(1)计算的。他不断强调要做得更好,并告诉他预期的复杂度是 O(n)。我想不出解决办法,被拒绝了。请帮我一个方法。
【问题讨论】:
-
那么使用 LinkedHashSet 怎么样,它将保持元素的插入顺序,并且检查包含和添加将是恒定的。所以复杂度是 O(n)
-
@Thomas 我不认为他希望我知道后缀 trie。可能有简单的方法。
-
@Ajris 地图的复杂度在最坏的情况下是 O(n)。添加不是 O(1)。
-
好吧,我想你说的是set。这完全取决于您是实现自己的 equals 和 hashcode 方法还是依赖于已经实现的方法。你通常不会说它的O(n),它的O(1),它优化了很多,所以大多数时候你不用担心它会上升到O(n),尤其是在这个
标签: string