# Check if a string is substring of another

• Difficulty Level : Medium
• Last Updated : 19 Sep, 2022

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

 ``

## 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(M * N)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up