# Check whether an Array is Subarray of another Array

Given two arrays A[] and B[] consisting of and integers. The task is to check whether the array B[] is a subarray of the array A[] or not.

Examples:

Input : A[] = {2, 3, 0, 5, 1, 1, 2}, B[] = {3, 0, 5, 1}
Output : Yes

Input : A[] = {1, 2, 3, 4, 5}, B[] = {2, 5, 6}
Output : No

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Source : Visa Interview Experience

Simple Approach: A simple approach is to run two nested loops and generate all subarrays of the array A[] and use one more loop to check if any of the subarray of A[] is equal to the array B[].

Efficient Approach : An efficient approach is to use two pointers to traverse both the array simultaneously. Keep the pointer of array B[] still and if any element of A[] matches with the first element of B[] then increase the pointer of both the array else set the pointer of A to the next element of the previous starting point and reset the pointer of B to 0. If all the elements of B are matched then print YES otherwise print NO.

Below is the implementation of the above approach:

## C++

 `// C++ program to check if an array is ` `// subarray of another array ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to check if an array is ` `// subarray of another array ` `bool` `isSubArray(``int` `A[], ``int` `B[], ``int` `n, ``int` `m) ` `{ ` `    ``// Two pointers to traverse the arrays ` `    ``int` `i = 0, j = 0; ` ` `  `    ``// Traverse both arrays simultaneously ` `    ``while` `(i < n && j < m) { ` ` `  `        ``// If element matches ` `        ``// increment both pointers ` `        ``if` `(A[i] == B[j]) { ` ` `  `            ``i++; ` `            ``j++; ` ` `  `            ``// If array B is completely ` `            ``// traversed ` `            ``if` `(j == m) ` `                ``return` `true``; ` `        ``} ` `        ``// If not, ` `        ``// increment i and reset j ` `        ``else` `{ ` `            ``i = i - j + 1; ` `            ``j = 0; ` `        ``} ` `    ``} ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `A[] = { 2, 3, 0, 5, 1, 1, 2 }; ` `    ``int` `n = ``sizeof``(A) / ``sizeof``(``int``); ` `    ``int` `B[] = { 3, 0, 5, 1 }; ` `    ``int` `m = ``sizeof``(B) / ``sizeof``(``int``); ` ` `  `    ``if` `(isSubArray(A, B, n, m)) ` `        ``cout << ``"YES\n"``; ` `    ``else` `        ``cout << ``"NO\n"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to check if an array is ` `// subarray of another array ` `class` `gfg  ` `{ ` `     `  `    ``// Function to check if an array is ` `    ``// subarray of another array ` `    ``static` `boolean` `isSubArray(``int` `A[], ``int` `B[],  ` `                                   ``int` `n, ``int` `m) ` `    ``{ ` `        ``// Two pointers to traverse the arrays ` `        ``int` `i = ``0``, j = ``0``; ` `     `  `        ``// Traverse both arrays simultaneously ` `        ``while` `(i < n && j < m) ` `        ``{ ` `     `  `            ``// If element matches ` `            ``// increment both pointers ` `            ``if` `(A[i] == B[j]) ` `            ``{ ` `     `  `                ``i++; ` `                ``j++; ` `     `  `                ``// If array B is completely ` `                ``// traversed ` `                ``if` `(j == m) ` `                    ``return` `true``; ` `            ``} ` `             `  `            ``// If not, ` `            ``// increment i and reset j ` `            ``else` `            ``{ ` `                ``i = i - j + ``1``; ` `                ``j = ``0``; ` `            ``} ` `        ``} ` `        ``return` `false``; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `main(String arr[]) ` `    ``{ ` `        ``int` `A[] = { ``2``, ``3``, ``0``, ``5``, ``1``, ``1``, ``2` `}; ` `        ``int` `n = A.length; ` `        ``int` `B[] = { ``3``, ``0``, ``5``, ``1` `}; ` `        ``int` `m = B.length; ` `     `  `        ``if` `(isSubArray(A, B, n, m)) ` `            ``System.out.println(``"YES"``); ` `        ``else` `            ``System.out.println(``"NO"``); ` `    ``} ` `} ` ` `  `// This code is contributed by gp6 `

## Python3

 `# Python3 program to check if an array is  ` `# subarray of another array  ` ` `  `# Function to check if an array is ` `# subarray of another array ` `def` `isSubArray(A, B, n, m): ` `     `  `    ``# Two pointers to traverse the arrays ` `    ``i ``=` `0``; j ``=` `0``; ` ` `  `    ``# Traverse both arrays simultaneously ` `    ``while` `(i < n ``and` `j < m): ` ` `  `        ``# If element matches ` `        ``# increment both pointers ` `        ``if` `(A[i] ``=``=` `B[j]): ` ` `  `            ``i ``+``=` `1``; ` `            ``j ``+``=` `1``; ` ` `  `            ``# If array B is completely ` `            ``# traversed ` `            ``if` `(j ``=``=` `m): ` `                ``return` `True``; ` `         `  `        ``# If not, ` `        ``# increment i and reset j ` `        ``else``: ` `            ``i ``=` `i ``-` `j ``+` `1``; ` `            ``j ``=` `0``; ` `         `  `    ``return` `False``; ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``A ``=` `[ ``2``, ``3``, ``0``, ``5``, ``1``, ``1``, ``2` `]; ` `    ``n ``=` `len``(A); ` `    ``B ``=` `[ ``3``, ``0``, ``5``, ``1` `]; ` `    ``m ``=` `len``(B); ` ` `  `    ``if` `(isSubArray(A, B, n, m)): ` `        ``print``(``"YES"``); ` `    ``else``: ` `        ``print``(``"NO"``); ` ` `  `# This code is contributed by Rajput-Ji `

## C#

 `// C# program to check if an array is ` `// subarray of another array ` `using` `System; ` ` `  `public` `class` `GFG  ` `{ ` `      `  `    ``// Function to check if an array is ` `    ``// subarray of another array ` `    ``static` `bool` `isSubArray(``int` `[]A, ``int` `[]B,  ` `                                   ``int` `n, ``int` `m) ` `    ``{ ` `        ``// Two pointers to traverse the arrays ` `        ``int` `i = 0, j = 0; ` `      `  `        ``// Traverse both arrays simultaneously ` `        ``while` `(i < n && j < m) ` `        ``{ ` `      `  `            ``// If element matches ` `            ``// increment both pointers ` `            ``if` `(A[i] == B[j]) ` `            ``{ ` `      `  `                ``i++; ` `                ``j++; ` `      `  `                ``// If array B is completely ` `                ``// traversed ` `                ``if` `(j == m) ` `                    ``return` `true``; ` `            ``} ` `              `  `            ``// If not, ` `            ``// increment i and reset j ` `            ``else` `            ``{ ` `                ``i = i - j + 1; ` `                ``j = 0; ` `            ``} ` `        ``} ` `        ``return` `false``; ` `    ``} ` `      `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String []arr) ` `    ``{ ` `        ``int` `[]A = { 2, 3, 0, 5, 1, 1, 2 }; ` `        ``int` `n = A.Length; ` `        ``int` `[]B = { 3, 0, 5, 1 }; ` `        ``int` `m = B.Length; ` `      `  `        ``if` `(isSubArray(A, B, n, m)) ` `            ``Console.WriteLine(``"YES"``); ` `        ``else` `            ``Console.WriteLine(``"NO"``); ` `    ``} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

Output:

```YES
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

5

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.