Matlab中如何判断二进制数组A是否按原顺序包含于数组B?
判断0-1数组A是否为数组B的顺序子序列
这其实是个经典的子序列匹配问题——核心不是判断元素是否存在,而是要验证A的所有元素能不能按完全一致的顺序在B中找到对应的位置(元素之间不需要连续)。和数组里只有0、1没关系,这个逻辑通用且高效。
核心思路:双指针法
用两个指针分别遍历A和B,按顺序匹配A的每个元素:
- 初始化指针
i(遍历A)和j(遍历B)都为0 - 遍历B的每个元素:
- 如果当前B[j]和A[i]相等,说明找到A的一个匹配元素,把
i往前移一位(去匹配A的下一个元素) - 不管是否匹配,
j都往前移(继续遍历B的下一个元素)
- 如果当前B[j]和A[i]相等,说明找到A的一个匹配元素,把
- 最后如果
i走到了A的末尾(也就是i == len(A)),说明A的所有元素都按顺序在B中找到了,返回True;否则返回False
代码示例(Python)
def is_a_subsequence_of_b(A, B): a_ptr = b_ptr = 0 len_a, len_b = len(A), len(B) while a_ptr < len_a and b_ptr < len_b: if A[a_ptr] == B[b_ptr]: a_ptr += 1 b_ptr += 1 # 如果A的所有元素都匹配完成,返回True return a_ptr == len_a
测试你的示例
A = [0, 1, 1, 0, 0, 0, 0, 1] B = [0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1] print(is_a_subsequence_of_b(A, B)) # 输出: True
这个方法的时间复杂度是O(len(B)),只需要遍历B一次,非常高效;空间复杂度是O(1),不需要额外的存储空间。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

