假设您的匹配序列中可以有“洞”(A = [1,3,2] AND B = [1,4,2] 然后 MatchSet = {1,2})
也许我错了,但你可以试试这个伪代码:
i <- 0; j <- 0; jHit <- -1
matchSet <- Empty
While i < Length(A) AND j < Length(B):
    If A[i] == B[j] Then
        matchSet.add(A[i])
        i <- i+1
        jHit <- j
    End If
    j <- j+1
    If j == Length(B) Then
        i <- i+1
        j <- jHit+1
    End If
End Loop
第一个索引 (i) 指向 B 中未找到的 A 的下一个元素,而 (j) 用于查找 B 的下一个元素(在 A 中找到的最后一个元素之后)。
这会给你 O(mN) 的时间复杂度和 O(N) 的空间使用量。
这里有一个 Python 实现:
def match(A,B):
    i = 0
    j = 0
    jHit = -1
    res = []
    while i < len(A) and j < len(B):
        if A[i] == B[j]:
            res.append(A[i])
            i += 1
            jHit = j
        j += 1
        if j == len(B):
            i += 1
            j = jHit+1
    return res