题目描述
给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。
请你判断 a 序列是否为 b 序列的子序列。
子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5}的一个子序列。
输入格式
第一行包含两个整数 n,m。
第二行包含 n 个整数,表示 a1,a2,…,an。
第三行包含 m 个整数,表示 b1,b2,…,bm。
输出格式
如果 a 序列是 b 序列的子序列,输出一行 Yes。
否则,输出 No。
数据范围
输入样例:
3 5 1 3 5 1 2 3 4 5
输出样例:
Yes
Solution
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 判断子序列
* 给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm
* 请你判断 a 序列是否为 b 序列的子序列。
* 子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5}
* 是序列 {a1,a2,a3,a4,a5} 的一个子序列。
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s[] = in.readLine().split(" ");
int n = Integer.parseInt(s[0]);
int m = Integer.parseInt(s[1]);
int a[] = new int[n + 10];
int b[] = new int[m + 10];
s = in.readLine().split(" ");
for (int i=0 ; i<n; i++){
a[i] = Integer.parseInt(s[i]);
}
s = in.readLine().split(" ");
for (int i=0 ; i<m; i++){
b[i] = Integer.parseInt(s[i]);
}
int i=0,j=0;
while(i < n && j < m){
// 找到了 i 往前走
if(a[i] == b[j]) i++;
j++;
}
if(i == n ) System.out.println("Yes");
else System.out.println("No");
}
}