AcWing
2816. 判断子序列
双指针分别用于匹配两个序列的当前位置。
时间复杂度$O(n + m)$.
#include <iostream>
using namespace std;
int n, m;
const int N = 100010;
int a[N], b[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i ++) cin >> a[i];
for(int i = 1; i <= m; i ++) cin >> b[i];
int i = 1, j = 1;
bool flag = false;
for(; i <= n && j <= m; j ++){
if(a[i] == b[j]){
i ++;
if(i == n + 1){
flag = true;
break;
}
}
}
if(flag) cout << "Yes";
else cout << "No";
return 0;
}