# Frequency of a substring in a string | Set 2

• Difficulty Level : Medium
• Last Updated : 30 Oct, 2020

Given a string str of length N and a substring pattern of length M, the task is to find the frequency of occurrences of pattern as a substring in the given string. If pattern is present in the string str, then print “Yes” with the count of its occurrence. Otherwise, print “No”.

Examples:

Input: str = “geeksforgeeks”, pattern = “geeks”
Output: 2
Explanation:
The occurrence of the string “geeks” in the string “geeksforgeeks” is at index 0 and 8.
Therefore, the count is 2.

Input: str = “dhimanman”, pattern = “max”
Output: 0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach: Refer to the previous post for the simplest approach to solve the problem.
Time Complexity: O(N*M)
Auxiliary Space: O(1)

Approach using KMP Algorithm: Refer to the previous post of this article to solve the problem using KMP algorithm.
Time Complexity: O(N + M)
Auxiliary Space: O(M)

Approach using Regular Expression: Follow the steps below to solve the problem:

• Form the regular expression of the string pattern using regex() function.
• Create a smatch M using function smatch().
• Check the presence of the string pattern in the string str using function regex_match() as:

regex_search(str, m, c)
where,
str is the given string,
m is smatch,
c is the regular expression of the string pattern.

• In the above steps, if the function regex_match() returns True, then print “Yes” and find the occurrence of the string pattern. Otherwise, print “No”.
• Create a variable numberOfMatches of data type ptrdiff_t to store the count of occurrence.
• Find the numberOfMatches using function regex_iterator() function as:

ptrdiff_t numberOfMatches = std::distance(sregex_iterator(S.begin(), S.end(), c), sregex_iterator())

• Print the count of occurrence in the above steps as the result.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach`` ` `#include ``using` `namespace` `std;`` ` `// Function to find the frequency of``// substring in the given string S``void` `find_frequency(string S,``                    ``string pattern)``{``    ``// Create a regular expression``    ``// of the string pattern``    ``regex c(pattern);`` ` `    ``// Determines the matching behavior``    ``smatch m;`` ` `    ``// Use member function on 'm'``    ``// regex_search to check if``    ``// string X is present in S or not``    ``if` `(regex_search(S, m, c) == ``true``) {``        ``cout << ``"Yes"``             ``<< ``"\n"``;``    ``}``    ``else` `{``        ``cout << ``"No"``;``    ``}`` ` `    ``// Count the number of matches``    ``ptrdiff_t` `numberOfMatches``        ``= std::distance(``            ``sregex_iterator(S.begin(),``                            ``S.end(), c),``            ``sregex_iterator());`` ` `    ``// Print the coun of occurrence``    ``cout << ``"Frequency of string "``         ``<< pattern << ``" is "``         ``<< numberOfMatches;``}``// Driver code``int32_t main()``{``    ``// Given string str and pattern``    ``string str = ``"geeksforgeeks"``;``    ``string pattern = ``"geeks"``;`` ` `    ``// Function Call``    ``find_frequency(str, pattern);`` ` `    ``return` `0;``}`
Output:
```Yes
Frequency of string geeks is 2
```

Time Complexity: O(N + M)
Auxiliary Space: O(M)

My Personal Notes arrow_drop_up