17.Acwing基础课第2816题-简单-判断子序列

17.Acwing基础课第2816题-简单-判断子序列

题目描述

给定一个长度为 \(n\) 的整数序列 \(a_1,a_2,…,a_n\)以及一个长度为 m 的整数序列 \(b_1,b_2,…,b_m\)

请你判断 \(a\) 序列是否为 \(b\) 序列的子序列。

子序列指序列的一部分项按原有次序排列而得的序列,例如序列 \({a1,a3,a5}\)是序列 \({a1,a2,a3,a4,a5}\)的一个子序列。

输入格式

第一行包含两个整数 \(n,m\)

第二行包含\(n\)个整数,表示\(a_1,a_2,…,a_n\)

第三行包含 \(m\)个整数,表示\(b_1,b_2,…,b_m\)

输出格式

如果 \(a\) 序列是 \(b\) 序列的子序列,输出一行 Yes

否则,输出 No

数据范围

\(1≤n≤m≤10^5,\)
\(−10^9≤a_i,b_i≤10^9\)

输入样例

3 5
1 3 5
1 2 3 4 5

输出样例

Yes

思路解析:

算法:双指针

代码:

#include <iostream>
#include <cstring>

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) puts("Yes");
    else puts("No");

    return 0;
}
posted @ 2026-03-27 22:18  CodeMagicianT  阅读(5)  评论(0)    收藏  举报