找到K最大的子串

时间:2016-12-03 12:15:53

标签: arrays string algorithm sorting

我给的是长度为S的字符串10^5,现在对于所有可能的N+1C2子字符串,当所有子字符串按升序排序时,我必须输出K子字符串

For Ex:
S= STACK

Substring:
  A
  AC
  ACK
  C
  CK
  S
  ST
  STA ... so on

My Approach:生成所有子字符串对它们进行排序并输出K子字符串

然后我开始了解Suffix数组,对于我生成后缀数组的给定字符串,但是如何使用后缀数组计算K元素? 您能否解释一下如何使用Suffix Array计算K元素?

我已生成并了解后缀数组?但是如何使用它。
Suffix Array Algorithm Used

1 个答案:

答案 0 :(得分:-1)

后缀树为您提供字符串的所有后缀。因此,如果字符串是“堆栈”,则最长的后缀是stack $(我们添加一个虚拟的额外字符以防止任何后缀成为另一个后缀的前缀)。下一个最长的是美元,然后是美元。所有这些都可以从根目录访问。

现在子字符串只是后缀的前缀。通过遍历树,您可以获得所有子字符串,并进行排序。这是一个相当昂贵的解决方案。 为了使搜索更便宜,说我们想要K = 5.我们有一个后缀开始A,它有三个到结束符号的路径,$。所以A不是我们后缀的开头,我们没有后缀开始B,所以这不是我们的答案。我们有一个后缀从C开始,它有两条路径到$。因此,对于k = 5,后缀的第一个字母必须为“C”。然后我们延伸。我们丢失了三个位置,所以我们需要第一个C节点下的第二个后缀。