Given two strings s1 and s2, 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"
Simple Approach: The idea is to 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 run another loop checking for sub-string from every index.
For example, consider there to be a string of length N and a substring of length M. Then run a nested loop, where the outer loop runs from 0 to (N-M) and the inner loop from 0 to M. For very index check if the sub-string traversed by the inner loop is the given sub-string or not.
<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
Complexity Analysis:
-
Time complexity: O(m * n) where m and n are lengths of s1 and s2 respectively.
A nested loop is used the outer loop runs from 0 to N-M and inner loop from 0 to M so the complexity is O(m*n). -
Space Complexity: O(1).
As no extra space is required.
An efficient solution is to use a O(n) searching algorithm like KMP algorithm, Z algorithm, etc.
Please refer complete article on Check if a string is substring of another for more details!