2816 判断子序列 双指针算法
看了y总的代码 真的是佩服的五体投地
我是废物hhh
让两个指针同时从头走,每次循环 j 都右移一次, a[i] == b[i]
成立时 i 左移(i ++),开始匹配 a[ i ] 上的下一个数, i 的值即为 b[ m ] 中有 a[ n ] 中的元素的个数,循环结束后,若i == n 则 a[ n ] 中的元素正好 b[ m ] 中依次都有,即 a[ n ] 恰好为 b[ m ] 的子序列。
#include <iostream>
using namespace std;
const int N = 100010;
int n, m;
int a[N], b[N];
int main()
{
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i ++) scanf("%d", &a[i]);
for (int i = 0; i < m; i ++) scanf("%d", &b[i]);
int i = 0, j = 0;
while (i < n && j < m)
{
if (a[i] == b[j]) i ++;
j ++;
}
if (i == n) cout << "Yes";
else cout << "No";
return 0;
}