这串数字是某的子序列吗?

摘要:17.Acwing基础课第2816题-简单-判断子序列 题目描述 给定一个长度为 (n) 的整数序列 (a_1,a_2,…,a_n)以及一个长度为 m 的整数序列 (b_1,b_2,…,b_m)。 请你判断 (a) 序列是否
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; }