AcWing_2816 判断子序列(双指针)

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;
}