【发布时间】:2012-07-09 14:29:31
【问题描述】:
这是一道面试题。给定多个字符串,找到这样的字符串,它们是其他字符串的前缀。例如,给定strings = {"a", "aa", "ab", abb"},结果为{"a", "ab"}。
最简单的解决方案是对字符串进行排序并检查每对两个后续字符串是否第一个是第二个的前缀。算法的运行时间就是排序的运行时间。
我猜还有另一种解决方案,它使用trie,并具有复杂性O(N),其中N 是字符串的数量。你能推荐一个这样的算法吗?
【问题讨论】:
-
恐怕排序解决方案不会给你这样的运行时间。假设你有 {"a", "aa", "aaa"} - 你可以在 O(nlog(n)) 中对它们进行排序,但你仍然需要检查 "a" 是否是 "aa" 的前缀,以及 " a" 是 "aaa" 的前缀,而 "aa" 是 "aaa" 的前缀 - 这给了你 O(n^2)
-
@Michael 我提供了一种算法,我相信它可以在 O(N) 中解决您的问题,但您从未评论过它。您是否发现我的解决方案是正确的?如果是,请标记为正确答案,如果不是,我想听听您的意见
标签: algorithm data-structures language-agnostic trie