Open In App

Check if a string is substring of another

Last Updated : 08 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given two strings S1 and S2, The task is to find if S1 is a substring of S2. If yes, return the index of the first occurrence, else return -1.

Examples : 

Input: S1 = “for”, S2= “geeksforgeeks”
Output: 5
Explanation: String “for” is present as a substring of s2.

Input: S1 = “practice”, S2= “geeksforgeeks”
Output: -1.
Explanation: There is no occurrence of “practice” in “geeksforgeeks”

Recommended Practice

Naive Approach: Below is the idea to solve the problem.

Run a loop from start to end and for every index in the given string check whether the sub-string can be formed from that index. This can be done by running a nested loop traversing the given string and in that loop running another loop checking for sub-strings starting from every index. 

Follow the steps below to implement the idea:

  • Run a for loop with counter i from 0 to N – M.
    • Run a for loop with counter j from 0 to M-1.
      • Compare jth character of S1 with (i+j)th character of S2.
      • If the loop terminates after matching all the characters, then return i, i.e. substring S1 is found starting from ith character of S2
  • Return -1 as no substring is found.

Below is the Implementation of the above idea.

C




// C program to check if a string is
// substring of other.
#include <stdio.h>
#include <string.h>
 
// Returns true if s1 is substring of s2
int isSubstring(char* s1, char* s2)
{
    int M = strlen(s1);
    int N = strlen(s2);
 
    /* A loop to slide pat[] one by one */
    for (int i = 0; i <= N - M; i++) {
        int j;
 
        /* For current index i, check for
 pattern match */
        for (j = 0; j < M; j++)
            if (s2[i + j] != s1[j])
                break;
 
        if (j == M)
            return i;
    }
 
    return -1;
}
 
/* Driver code */
int main()
{
    char s1[] = "for";
    char s2[] = "geeksforgeeks";
    int res = isSubstring(s1, s2);
    if (res == -1)
        printf("Not present");
    else
        printf("Present at index %d", res);
    return 0;
}


C++




// C++ program to check if a string is
// substring of other.
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if s1 is substring of s2
int isSubstring(string s1, string s2)
{
    int M = s1.length();
    int N = s2.length();
 
    /* A loop to slide pat[] one by one */
    for (int i = 0; i <= N - M; i++) {
        int j;
 
        /* For current index i, check for
 pattern match */
        for (j = 0; j < M; j++)
            if (s2[i + j] != s1[j])
                break;
 
        if (j == M)
            return i;
    }
 
    return -1;
}
 
/* Driver code */
int main()
{
    string s1 = "for";
    string s2 = "geeksforgeeks";
    int res = isSubstring(s1, s2);
    if (res == -1)
        cout << "Not present";
    else
        cout << "Present at index " << res;
    return 0;
}


Java




// Java program to check if a string is
// substring of other.
class GFG {
 
    // Returns true if s1 is substring of s2
    static int isSubstring(String s1, String s2)
    {
        int M = s1.length();
        int N = s2.length();
 
        /* A loop to slide pat[] one by one */
        for (int i = 0; i <= N - M; i++) {
            int j;
 
            /* For current index i, check for
            pattern match */
            for (j = 0; j < M; j++)
                if (s2.charAt(i + j) != s1.charAt(j))
                    break;
 
            if (j == M)
                return i;
        }
 
        return -1;
    }
 
    /* Driver code */
    public static void main(String args[])
    {
        String s1 = "for";
        String s2 = "geeksforgeeks";
 
        int res = isSubstring(s1, s2);
 
        if (res == -1)
            System.out.println("Not present");
        else
            System.out.println("Present at index " + res);
    }
}
 
// This code is contributed by JaideepPyne.


Python3




# Python3 program to check if
# a string is substring of other.
 
# Returns true if s1 is substring of s2
 
 
def isSubstring(s1, s2):
    M = len(s1)
    N = len(s2)
 
    # A loop to slide pat[] one by one
    for i in range(N - M + 1):
 
        # For current index i,
        # check for pattern match
        for j in range(M):
            if (s2[i + j] != s1[j]):
                break
 
        if j + 1 == M:
            return i
 
    return -1
 
 
# Driver Code
if __name__ == "__main__":
    s1 = "for"
    s2 = "geeksforgeeks"
    res = isSubstring(s1, s2)
    if res == -1:
        print("Not present")
    else:
        print("Present at index " + str(res))
 
# This code is contributed by ChitraNayal


C#




// C# program to check if a string is
// substring of other.
using System;
class GFG {
 
    // Returns true if s1 is substring of s2
    static int isSubstring(string s1, string s2)
    {
        int M = s1.Length;
        int N = s2.Length;
 
        /* A loop to slide pat[] one by one */
        for (int i = 0; i <= N - M; i++) {
            int j;
 
            /* For current index i, check for
            pattern match */
            for (j = 0; j < M; j++)
                if (s2[i + j] != s1[j])
                    break;
 
            if (j == M)
                return i;
        }
 
        return -1;
    }
 
    /* Driver code */
    public static void Main()
    {
        string s1 = "for";
        string s2 = "geeksforgeeks";
 
        int res = isSubstring(s1, s2);
 
        if (res == -1)
            Console.Write("Not present");
        else
            Console.Write("Present at index " + res);
    }
}
 
// This code is contributed by nitin mittal.


PHP




<?php
// PHP program to check if a
// string is substring of other.
 
// Returns true if s1 is substring of s2
function isSubstring($s1, $s2)
{
    $M = strlen($s1);
    $N = strlen($s2);
 
    // A loop to slide
    // pat[] one by one
    for ($i = 0; $i <= $N - $M; $i++)
    {
        $j = 0;
 
        // For current index i,
        // check for pattern match
        for (; $j < $M; $j++)
            if ($s2[$i + $j] != $s1[$j])
                break;
 
        if ($j == $M)
            return $i;
    }
 
    return -1;
}
 
// Driver Code
$s1 = "for";
$s2 = "geeksforgeeks";
$res = isSubstring($s1, $s2);
if ($res == -1)
    echo "Not present";
else
    echo "Present at index " . $res;
 
// This code is contributed by mits
?>


Javascript




<script>
 
// JavaScript program to check if a string is
// substring of other.
 
// Returns true if s1 is substring of s2
function isSubstring(s1, s2)
{
    var M = s1.length;
    var N = s2.length;
 
    /* A loop to slide pat[] one by one */
    for (var i = 0; i <= N - M; i++) {
        var j;
 
        /* For current index i, check for
 pattern match */
        for (j = 0; j < M; j++)
            if (s2[i + j] != s1[j])
                break;
 
        if (j == M)
            return i;
    }
 
    return -1;
}
 
/* Driver code */
var s1 = "for";
var s2 = "geeksforgeeks";
var res = isSubstring(s1, s2);
if (res == -1)
    document.write( "Not present");
else
    document.write( "Present at index " + res);
 
</script>


Output

Present at index 5

Time complexity: O(M * N) where m and n are lengths of s1 and s2 respectively, Nested loops are used, outer from 0 to N – M and inner from 0 to M 
Auxiliary Space: O(1), As no extra space is required.

Check if a string is a substring of another using STL:

 std::find from C++ STL, the index method in Python, the indexOf method in Java, the indexOf method in JavaScript are some inbuilt functions in the libraries of respective languages for finding the starting index of a substring in a given string. 

Below is the Implementation of above approach.

C++




// C++ implementation of the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// function to get the index of s2 in s1
int isSubstring(string s1, string s2)
{
    // using find method to check if s1 is
    // a substring of s2
    if (s2.find(s1) != string::npos)
        return s2.find(s1);
    return -1;
}
 
// Driver code
int main()
{
    string s1 = "for";
    string s2 = "geeksforgeeks";
 
    // Function Call
    int res = isSubstring(s1, s2);
    if (res == -1)
        cout << "Not present";
    else
        cout << "Present at index " << res;
    return 0;
}
 
// this code is contributed by phasing17


Python3




# Python3 program to check if
# a string is substring of other.
 
# Checks if s1 is a substring of s2
 
 
def isSubstring(s1, s2):
    if s1 in s2:
        return s2.index(s1)
    return -1
 
 
# Driver Code
if __name__ == "__main__":
    s1 = "for"
    s2 = "geeksforgeeks"
    res = isSubstring(s1, s2)
    if res == -1:
        print("Not present")
    else:
        print("Present at index " + str(res))
 
# This code is contributed by phasing17


Java




// Java program to implement the approach
 
class GFG {
    // function to get the index of s2 in s1
    static int isSubstring(String s1, String s2)
    {
        // using indexOf method to check if s1 is
        // a substring of s2
        return s2.indexOf(s1);
    }
    public static void main(String[] args)
    {
        String s1 = "for";
        String s2 = "geeksforgeeks";
 
        // Function Call
        int res = isSubstring(s1, s2);
        if (res == -1)
            System.out.println("Not present");
        else
            System.out.println("Present at index " + res);
    }
}
 
// this code is contributed by phasing17


C#




// C# program to implement the approach
 
using System;
 
public class GFG {
    // function to get the index of s2 in s1
    static int isSubstring(string s1, string s2)
    {
        // using IndexOf method to check if s1 is
        // a substring of s2
        return s2.IndexOf(s1);
    }
    public static void Main(string[] args)
    {
        string s1 = "for";
        string s2 = "geeksforgeeks";
 
        // Function Call
        int res = isSubstring(s1, s2);
        if (res == -1)
            Console.WriteLine("Not present");
        else
            Console.WriteLine("Present at index " + res);
    }
}
 
// this code is contributed by phasing17


Javascript




//JS program to implement the approach
 
// function to get the index of s2 in s1
function isSubstring(s1, s2)
{
    // using indexOf method to check if s1 is
    // a substring of s2
    return s2.indexOf(s1);
}
 
// Driver code
var s1 = "for";
var s2 = "geeksforgeeks";
   
//Function Call
var res = isSubstring(s1, s2);
if (res == -1)
    console.log("Not present");
else
    console.log("Present at index " + res);
 
 
// this code is contributed by phasing17


Output

Present at index 5

Time Complexity: O(N) ,  where N is the length of the longer string s2 
Auxiliary space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads