如果我想找到2个字符串的最长公共子字符串,那么在时间/空间复杂度方面哪种方法会更有效:使用DP的后缀数组?
DP会产生O(m * n)空间,时间复杂度为O(m * n),后缀数组方法的时间复杂度是多少?
1)计算后缀O(m)+ O(n) 2)对它们进行排序O(m + n log2(m + n)) 3)找到m + n-1个字符串的最长公共前缀? [我不确定如何计算#ofcomparisons]
后缀数组允许我们使用子字符串执行更多操作(例如搜索子字符串等),但由于在这种情况下不需要其他函数,因此将DP视为更简单/更清晰的方法?在我们比较2个字符串的情况下应该使用哪一个?
另外,如果我们有超过2个字符串怎么办?
答案 0 :(得分:0)
后缀数组会更好。 LCS(n个字符串的最长公共子字符串)问题可以解决如下: