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