判断子序列
感觉比上一个双指针的题目要简单一些。
双指针同向而行,比较好想。
双指针相向而行,比较难想。
#include<iostream>
using namespace std;
const int N = 100010;
int a[N], b[N];
int main() {
int n, m, ch;
cin >> n >> m;
for(int i = 0; i < n; i++) {
scanf("%d", &ch);
a[i] = ch;
}
for(int i = 0; i < m; i++) {
scanf("%d", &ch);
b[i] = ch;
}
for(int i = 0, j = 0; i < n; i++) {
bool mk = true;
while(j < m) {
if(b[j] == a[i]) {
mk = false;
break;
}
j++;
}
// cout << "i:" << i << " a[i]:" << a[i] << " j:" << j << " b[j]:" << b[j];
// cout << endl;
if(mk == false) {
if(i > j) {
cout << "No";
return 0;
}
} else {
cout << "No";
return 0;
}
j++;
}
cout << "Yes";
return 0;
}