如何找到匹配给定后缀数组的字符串?

时间:2015-05-17 15:04:40

标签: arrays string algorithm restore suffix-array

我有a suffix array。如何获取一个字符串,后缀数组将等于给定的数组?

例如。让我有这个数组:[7, 6, 4, 2, 1, 5, 3]。然后字符串banana$对我有好处,因为get_suffix_array(banana$) == [7, 6, 4, 2, 1, 5, 3]

1 个答案:

答案 0 :(得分:1)

您可以从约束中构建directed graph,然后运行Topological Sorting,并根据生成的顺序为节点分配字母。

首先为未知字母构建节点,每个节点一个($除外)。

第一个条目将始终是数组的长度,因为它是$。这没有给我们什么。

但是,以下条目都给出了约束条件。

例如,由于第二个条目是数组的长度减去1,因此它不能大于任何其他字母。因此,将此节点的边缘放置到其他每个节点。 但是,如果数组的长度减去2,则会有一个小于它的字母,但它会小于其他所有字母。你可以从后缀数组中找到这个较小的元素,并将一个节点从它放到最后一个字母,从最后一个字母到所有其他字母等等。