Skip to content
Related Articles

Related Articles

Check whether an Array is Subarray of another Array
  • Difficulty Level : Basic
  • Last Updated : 18 Mar, 2020

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.

My Personal Notes arrow_drop_up
Recommended Articles
Page :