双指针算法
要判断$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;
}