1.思路
(==刚开始看错题了,以为很难,后面仔细一看,原来水题一道。==)思路很简单,直接遍历b数组,如果遇到和a[j]相等的元素就把j++,也就是匹配下一个,因为是子序列,所以不用回头匹配。最后如果j==n就代表匹配成功
2.代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[] a = new int[n];
int[] b = new int[m];
for(int i = 0; i < n; i++)
a[i] = in.nextInt();
for(int i = 0; i < m; i++)
b[i] = in.nextInt();
int j = 0; //匹配a[j]
for(int i = 0; i < m; i++) { //遍历b数组
if(a[j] == b[i]) //匹配子序列
j++;
if(j == n) //a是b的子序列
break;
}
if(j == n)
System.out.println("Yes");
else
System.out.println("No");
}
}
3.复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(m + n)