算法基础课题解合集
双指针思路
我们可以用 $i$ 指针扫描 $A$ 序列,$j$ 指针扫描 $B$ 序列,两个指针初始为序列的最左侧,然后我们每次判断 $A_i$ 是否等于 $B_j$,如果等于,就让 $i$ 往后一位,每次让 $j$ 指针往后一位。
如果最后 $A$ 中的每一个数都匹配上了,就说明匹配成功,否则匹配失败。
代码
#include <iostream>
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) {
//如果当前A[i]和B[j]匹配
if (a[i] == b[j]) i ++;
//j每次无论如何都往后一位
j ++;
}
//如果扫描完了,就说明匹配成功
if (i == n) puts("Yes");
else puts("No");
return 0;
}
好啦,这篇题解到这里就结束啦!感谢观看!!!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$