最长的通用前缀阵列

时间:2012-01-03 04:22:29

标签: algorithm data-structures string-matching

以下是字符串Suffix array的{​​{1}}和LCP array信息。我知道MISSISSIPPI提供了有关LCPstr[i - 1]之间最长公共前缀长度的信息。如何在此字符串的任意两个任意后缀之间获得最长的公共前缀长度。例如,我想要str[i]MISSISSIPPI

之间最长的公共前缀
ISSIPPI

2 个答案:

答案 0 :(得分:8)

http://en.wikipedia.org/wiki/Suffix_array开始,我们知道“属于一组连续排序后缀的最小lcp值给出所有这些后缀中最长的公共前缀这一事实也很有用。”所以在你的情况下,MISSISSIPPI和ISSIPPI之间的LCP是min(4,0)= 0.

您可以通过http://en.wikipedia.org/wiki/Range_Minimum_Query找到时间范围O(1)中的最小值,如果您查看那里的TopCoder链接,有很多关于替代方法的信息。

答案 1 :(得分:0)

最长的通用前缀问题的Javascript解决方案

const longestPrefix = arr => {
  if (arr.length === 0) {
    return "";
  }
  if (arr.length === 1) {
    return arr[0];
  }
  let end = 0;
  let check = false
  for (let j = 0; j < arr[0].length; j++){
    for (let i = 1; i < arr.length; i++) {
      if (arr[0][j] !== arr[i][j]) {
        check = true;
        break;
      }
    }
    if (check) {
      break;
    }
    end++;
  }
  return (arr[0].slice(0, end))
}

测试输入

console.log(longestPrefix(["Jabine", "Jabinder", "Jabbong"]))

输出

Jab