Recursive function to do substring search

Given a text txt[] and a pattern pat[], write a recursive function “contains(char pat[], char txt[])” that returns true if pat[] is present in txt[], otherwise false.

Examples:

1) Input:   txt[] =  "THIS IS A TEST TEXT"
pat[] = "TEST"
Output:  true

2) Input:  txt[] =  "geeksforgeeks"
pat[] = "quiz"
Output:  false;

We strongly recommend to minimize the browser and try this yourself first.

Below is recursive algorithm.

contains(tex[], pat[])
1) If the current character is the last character of the text, but pat
has more characters, return false.

2) Else If the current character is the last character of the pattern,
then return true

3) Else If current characters of pat and text match, then
return contains(text + 1, pat + 1);

4) Else If current characters of pat and text don't match
return contains(text + 1, pat);

Below is the implementation of the above algorithm.

C++

 // Recursive C++ program to find if a given pattern is  // present in a text #include using namespace std;    bool exactMatch(char *text, char *pat) {     if (*text == '\0' && *pat != '\0')         return false;        // Else If last character of pattern reaches     if (*pat == '\0')         return true;        if (*text == *pat)         return exactMatch(text + 1, pat + 1);        return false; }    // This function returns true if 'text' contain 'pat' bool contains(char *text, char *pat) {     // If last character of text reaches     if (*text == '\0')         return false;        // If current characters of pat and text match     if (*text == *pat)         if(exactMatch(text, pat))             return 1;         else           return contains(text + 1, pat);        // If current characters of pat and tex don't match     return contains(text + 1, pat); }    // Driver program to test above function int main() {     cout << contains("geeksforgeeks", "geeks") << endl;     cout << contains("geeksforgeeks", "geeksquiz") << endl;     cout << contains("geeksquizgeeks", "quiz") << endl;     return 0; }

Python3

 # Recursive Python3 program to find if a given pattern is  # present in a text    def exactMatch(text, pat, text_index, pat_index):     if text_index == len(text) and pat_index != len(pat):         return 0         # Else If last character of pattern reaches     if pat_index == len(pat):         return 1         if text[text_index] == pat[pat_index]:         return exactMatch(text, pat, text_index+1, pat_index+1)         return 0        # This function returns true if 'text' contain 'pat' def contains(text, pat, text_index, pat_index):     # If last character of text reaches     if text_index == len(text):         return 0         # If current characters of pat and text match     if text[text_index] == pat[pat_index]:         if exactMatch(text, pat, text_index, pat_index):             return 1         else:             return contains(text, pat, text_index+1, pat_index)         # If current characters of pat and tex don't match     return contains(text , pat, text_index+1, pat_index)     # Driver program to test the above function    print(contains("geeksforgeeks", "geeks", 0, 0)) print(contains("geeksforgeeks", "geeksquiz", 0, 0)) print(contains("geeksquizgeeks", "quiz", 0, 0))    # This code is contributed by ankush_953.

Output:

1
0
1

My Personal Notes arrow_drop_up

Improved By : san123, ankush_953

Article Tags :
Practice Tags :

4

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.