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

How to find some string matching a given suffix array?

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

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

您可以构建一个 directed graph from the constraints, then run Topological Sorting,并根据生成的顺序将字母分配给节点。

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

第一个条目将始终是数组的长度,因为它是 $。这对我们没有任何帮助。

不过,以下条目都给了我们限制。

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