acwing 判断子序列

题目

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

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

子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a_1,a_3,a_5} 是序列 {a_1,a_2,a_3,a_4,a_5} 的一个子序列。

输入格式

第一行包含两个整数 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
−109≤ai,bi≤109

输入样例:

3 5
1 3 5
1 2 3 4 5

输出样例:

Yes

题解

分析

  • 使用双指针,o为数组1的指针,p为数组2的指针
  • 因为数组2要比数组1大,所以使p每次循环自增,当有相同值,使o自增,最后检查o是否已经遍历完毕即可

代码

#include "iostream"
using namespace std;
const int N=100010;
int num[N]={0};
int num2[N]={0};
int main(){
    int n1,n2;
    cin>>n1>>n2;
    for(int i=0;i<n1;i++){
        cin>>num[i];
    }
    for(int i=0;i<n2;i++){
        cin>>num2[i];
    }
    int o=0,p=0;
    for(;p<n2&&o<n1;p++){
        if(num[o]==num2[p])o++;
    }
    if(o==n1)cout<<"Yes";
    else cout<<"No";
}
posted @ 2023-02-19 15:02  Cheng_Mao  阅读(16)  评论(0编辑  收藏  举报