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";
}

本文作者:Cheng_Mao

本文链接:https://www.cnblogs.com/ChengMao/p/17134750.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Cheng_Mao  阅读(16)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示