字符串本身中最长的公共子字符串

时间:2013-11-17 07:48:47

标签: c string algorithm lcs

给定一个像"geekthegeertheregeers"这样的字符串。所以我们必须在字符串本身中找到最长的公共子字符串。

就像在这种情况下"geer"将是最长的共同子串。 我的问题是这里将应用哪种算法。可以修改LCS来找到这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:1)

问题是“在子字符串集中发现最长的子字符串不止一次”? “geekthegeertheregeers”的结果应该是“egeer”?

如果是这样,您可以为输入字符串构建后缀数组,并为后缀数组构造LCP(最长公共前缀)数组。两者都可以在O(N)中完成(N是输入字符串的长度)。

参考:

  1. 后缀数组(http://en.wikipedia.org/wiki/Suffix_array
  2. LCP数组(http://en.wikipedia.org/wiki/LCP_array