Skip to content
Related Articles

Related Articles

Improve Article

Check whether an Array is Subarray of another Array

  • Difficulty Level : Easy
  • Last Updated : 11 May, 2021

Given two arrays A[] and B[] consisting of n and m 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 
 

 

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 <bits/stdc++.h>
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

Javascript




<script>
// Javascript program to check if an array is
// subarray of another array
 
 
// Function to check if an array is
// subarray of another array
function isSubArray(A, B, n,m)
{
    // Two pointers to traverse the arrays
    var 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;
}
 
var A = [ 2, 3, 0, 5, 1, 1, 2 ];
var n = A.length;
var B = [ 3, 0, 5, 1 ];
var m =B.length;
if (isSubArray(A, B, n, m))
        document.write( "YES<br>");
    else
        document.write( "NO<br>");
         
// This code is contributed by SoumikMondal
</script>
Output: 
YES

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :