解题思路:遍历子序列,如果相等,子序列和主序列都同时向后移动,如果不相等,主序列移动,子序列不移动.如果到达主序列的末尾,返回false,其他返回true.
时间复杂度O(n)
public static void main(String[] args) {
int a[] = {1,3,4,2};
int b[] = {1,2,4,3,1,4,6,5};
boolean b1 = subArrayFlag(a, b);
System.out.println(b1);
}
/**
* 判断一个子序列是否是另一个序列的子序列 时间复杂度O(n)
* @param a
* @param b
* @return
*/
public static boolean subArrayFlag(int[] a,int [] b){
int i=0;
int j=0;
int n=a.length;
int m=b.length;
while (i < n)
{
if (a[i] == b[j]) /** 相等时,下标同时向后移动一个位置. */
{
i++;
j++;
}
else
{
j++; /** 不等时,只将b[]数组下标向后移动一个位置. */
if (j == m) /** 当b[]数组找完时,指向了第m+1个不存在的元素,则不符合。 */
return false;
}
}
return true;
}