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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步