# Check if a string is substring of another

Last Updated : 08 May, 2023

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 #include   // 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 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.



## Javascript



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

Previous
Next