我正在研究一个考虑2个向量的问题,例如可以如下:
std::vector<int> v1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> v2 = { 3, 4, 7, 8, 9, 10};
如果我执行std :: set_intersection,它会给我以下向量:
std::vector<int> v3 = {3,4,7,8,9,10};
在这种情况下,有2个子范围:3,4和7,8,9,10。最长的子范围是7,8,9,10,它的第一个元素是7.因此我想在v2 = 2中得到它的索引。
我正在考虑使用迭代器并将其重置为指向找到更长子范围时的第一个元素,然后稍后可以使用距离(v2.begin(),iter)来获取它,但无法计算它还没出来。有没有人知道如何一般地这样做?非常感谢。
答案 0 :(得分:0)
您正在寻找的问题是:Longest Common contiguous subsequence
使用动态编程的解决方案:
假设I = len(V1)
&amp; J = len(V2)
创建一个表len[I+1][J+1]
以存储到目前为止的公共子序列,并在MaxCurrent
i
&amp; V1
的{{1}}元素的最长子序列到目前为止,j
的{{1}}元素是:
V2
并更新V1[i-1] == V2[j-1] : (len[i-1][j-1] + 1)
最大输出为MaxCurrent
注意:基数为max (MaxCurrent, len[i][j])