You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的下一个元素)
  • 最后如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:28:23