蓝桥杯 2816. 判断子序列 知识点:双指针

62 阅读1分钟

题目:2816. 判断子序列 - AcWing题库

思想来源:AcWing 2816. 判断子序列(双指针算法) - AcWing

当a[i]==a[j]的时候,同时向后移: image.png

此时a[i]!=a[j]: image.png

i就不移动了,j继续移动:

image.png 相等了就再同时移动:

image.png

不相等就只有j移动:

下面的字符串遍历完了,说明下面的是上面的子串 image.png

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int n,m;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>a[i];
	for(int j=0;j<m;j++)cin>>b[j];
	
	int i=0;
    for(int j=0;j<m;j++)  //母串
	{
		 if(i<n&&a[i]==a[j])i++; 
	 } 
	
    if(i==n)cout<<"Yes"<<endl;  //全部匹配完了
    else cout<<"No"<<endl;
	return 0;
}