双指针算法
1.j指针用来扫描整个b数组,i指针用来扫描a数组。若发现a[i] == b[j],则让i指针后移一位。
2.整个过程中,j指针不断后移,而i指针只有当匹配成功时才后移一位,若最后若i == n,则说明匹配成功。
为什么双指针做法是正确的?
整个过程中j指针不断扫描b数组并且向后移动,相当于不断给i指针所指向的a数组创建匹配的机会,只有匹配成功时i指针才会向后移动一位,当i == n时,说明全部匹配成功。
#include<iostream>
const int N=100010;
int a[N],b[N];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int j=0;j<m;j++) scanf("%d",&b[j]);
int i=0,j=0;
while(i<n&&j<m){
if(a[i]==b[j]) i++;
j++;
}
if(i==n) printf("Yes");
else printf("No");
return 0;
}