我有a suffix array。如何获取一个字符串,后缀数组将等于给定的数组?
例如。让我有这个数组:[7, 6, 4, 2, 1, 5, 3]
。然后字符串banana$
对我有好处,因为get_suffix_array(banana$) == [7, 6, 4, 2, 1, 5, 3]
。
答案 0 :(得分:1)
您可以从约束中构建directed graph,然后运行Topological Sorting,并根据生成的顺序为节点分配字母。
首先为未知字母构建节点,每个节点一个($
除外)。
第一个条目将始终是数组的长度,因为它是$
。这没有给我们什么。
但是,以下条目都给出了约束条件。
例如,由于第二个条目是数组的长度减去1,因此它不能大于任何其他字母。因此,将此节点的边缘放置到其他每个节点。 但是,如果数组的长度减去2,则会有一个小于它的字母,但它会小于其他所有字母。你可以从后缀数组中找到这个较小的元素,并将一个节点从它放到最后一个字母,从最后一个字母到所有其他字母等等。