【发布时间】:2018-11-26 07:45:11
【问题描述】:
对于两个字符串 A 和 B,我们将字符串的相似度定义为两个字符串共有的最长前缀的长度。例如字符串“abc”和“abd”的相似度为2,而字符串“aaa”和“aaab”的相似度为3。
问题是给出一个算法来计算字符串 S 与其每个后缀的相似性总和。例如,让字符串为:ababaa。那么,字符串的后缀是ababaa、babaa、abaa、baa、aa和a。这些字符串中的每一个与字符串ababaa 的相似性分别为6,0,3,0,1,1。因此答案是6 + 0 + 3 + 0 + 1 + 1 = 11。
【问题讨论】:
-
那么你有没有尝试解决它?你在哪里卡住了?您需要什么样的帮助?
-
Ukkonen算法的实现在O(n)中构建前缀树gist.github.com/3355993
-
Ukkonen 的算法用于构建 suffix 树,当然这正是本文的目的。后缀树与后缀数组并不完全相同,尽管它们显然是相关的。