算法题-判断子序列

  1. 双指针算法

https://www.acwing.com/problem/content/description/2818/

双指针算法

要判断$a$数组是否是$b$数组的子序列, 首先用一个指针j初始指向$a$数组的起始位置, 然后遍历$b$数组, 如果当前遍历到的$b$数组的元素和$a[j]$元素相等, 那么就把j指针向后移动.

如果$j$指针移动到了$a$数组的末尾, 说明$a$就是子序列.

#include <iostream>

using namespace std;

const int N = 100010;

int n, m;
int a[N], b[N];

int main()
{

    cin >> n >> m;
    for (int i = 0; i < n; i ++) cin >> a[i];
    for (int i = 0; i < m; i ++) cin >> b[i];

    int j = 0;
    for (int i = 0; i < m; i ++) {
        if (j < n && a[j] == b[i]) j ++;
    }

    if (j == n) puts("Yes");
    else puts("No");

    return 0;
}