【发布时间】:2014-05-30 04:48:30
【问题描述】:
我正在寻找这个问题的最佳解决方案。
给定一个string s of length n,找到一个从左到右的前缀,相当于一个从右到左的后缀。
前缀和后缀可以重叠。
示例:给定abababa,前缀为[ababa]ba,后缀为ab[ababa]。
我可以做到这一点
对于每个
i = 0 to n-1,取以 i 结尾的前缀并查找是否有合适的后缀。时间是O(n^2)时间和O(1)空间。我想出了一个优化,我们可以索引所有字符的位置。这样,我们可以从 1/ 中消除样本空间集。同样,最坏情况的复杂度是
O(n^2)和O(n)额外空间。
有没有更好的算法呢?
【问题讨论】:
-
查看 Knuth-Morris-Pratt 算法。作为该算法的一部分,您可以使用空间 O(n) 在时间 O(n) 中找到具有此属性的最长边界。
-
简单的解决方案是返回整个字符串:-)。前任。
([abababa)]。我猜你想要除了上述值之外的最大可能值? -
你能举个例子,其中前缀与其相反的前缀不同吗? - 不清楚前缀和后缀是否都从外部开始(
aabxnbaa中的aab),或者它们是否都从左侧开始(aabxnaab中的aab,或整个字符串,如 Kevin提到)。 -
我已经用代码更新了我的答案,看看吧。
-
谢谢@Danstahr 我会看看。如果可能的话,你能附上关于 KMP needle haystack 的简短描述吗?
标签: string algorithm substring