Questions tagged «suffix-array»

3
使用后缀数组计算两个字符串的最长公共子字符串
在学习了如何以复杂度构建后缀数组之后,我对发现后缀数组的应用感兴趣。其中之一是在时间中找到两个字符串之间最长的公共子字符串。我在互联网上发现以下算法:O(N)O(N)O(N)O(N)O(N)O(N) 将两个字符串和合并为一个字符串AAABBBABABAB 计算的后缀数组ABABAB 计算(最长公共前缀)数组LCPLCPLCP 答案是最大值LCP[i]LCP[i]LCP[i] 我尝试实现它,但是由于没有说很多实现细节(即,在连接字符串时,是否应该在它们之间加上一个特殊字符()?),我的代码在许多测试用例上均失败了。有人可以详细说明一下该算法吗?AcBAcBAcB 提前致谢。 注意:我不保证该算法的正确性;我在博客上找到了它,但不确定它是否有效。如果您认为它不正确,请提出另一种算法。

1
计算来自数组的连续子数组的和数
我们给出阵列与所有一个[ 我] > 0。a [ 1 … n ]a[1…n]a[1 \ldots n]a [ i ] > 0a[i]>0a[i]>0 现在我们需要找到可以从其子数组中形成多少个不同的总和(其中,子数组是该数组的连续范围,即,对于某些j ,k的,总和是所有子数组的元素)。例如,如果一个= [ 1 ,2 ,1 ],则答案为4:我们可以形成1 ,2 ,3 ,4。a [ j … k ]a[j…k]a[j\ldots k]Ĵ ,ķj,kj,k一个= [ 1 ,2,1 ]a=[1,2,1]a=[1,2,1]1 ,2 , 3 ,41,2,3,4 1,2,3,4 我知道如何计算时间中不同总和的数量。Ø (ñ2)O(n2)O(n^2) 此外,我已经意识到这与经典问题类似,在经典问题中,我们需要找到字符串的不同子字符串的数量。我正在考虑构造后缀数组并以类似的方式(以时间)解决它的可能性。但是我还无法弄清楚如何对其进行修改以在这里工作。例如,如果我们使用后缀数组为一个= [ 1 ,2 ,1 ],我们将得到5案件代替的四个上可接受的那些。是否可以使用后缀数组来做到这一点,或者我在想错方向吗?Ø …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.