# Count of times second string can be formed from the characters of first string

• Difficulty Level : Medium
• Last Updated : 03 Mar, 2022

Given two strings str and patt, the task is to find the count of times patt can be formed using the characters of str.
Examples:

Input: str = “geeksforgeeks”, patt = “geeks”
Output:
“geeks” can be made at most twice from
the characters of “geeksforgeeks”.
Input: str = “abcbca”, patt = “aabc”
Output:

Approach: Count the frequency of all the characters of str and patt and store them in arrays strFreq[] and pattFreq[] respectively. Now any character ch which appears in patt can be used in a maximum of strFreq[ch] / pattFreq[ch] words and the minimum of this value among all the characters of patt is the required answer.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `const` `int` `MAX = 26;` `// Function to update the freq[] array``// to store the frequencies of``// all the characters of str``void` `updateFreq(string str, ``int` `freq[])``{``    ``int` `len = str.length();` `    ``// Update the frequency of the characters``    ``for` `(``int` `i = 0; i < len; i++) {``        ``freq[str[i] - ``'a'``]++;``    ``}``}` `// Function to return the maximum count``// of times patt can be formed``// using the characters of str``int` `maxCount(string str, string patt)``{` `    ``// To store the frequencies of``    ``// all the characters of str``    ``int` `strFreq[MAX] = { 0 };``    ``updateFreq(str, strFreq);` `    ``// To store the frequencies of``    ``// all the characters of patt``    ``int` `pattFreq[MAX] = { 0 };``    ``updateFreq(patt, pattFreq);` `    ``// To store the result``    ``int` `ans = INT_MAX;` `    ``// For every character``    ``for` `(``int` `i = 0; i < MAX; i++) {` `        ``// If the current character``        ``// doesn't appear in patt``        ``if` `(pattFreq[i] == 0)``            ``continue``;` `        ``// Update the result``        ``ans = min(ans, strFreq[i] / pattFreq[i]);``    ``}` `    ``return` `ans;``}` `// Driver code``int` `main()``{``    ``string str = ``"geeksforgeeks"``;``    ``string patt = ``"geeks"``;` `    ``cout << maxCount(str, patt);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach` `class` `GFG``{` `static` `int` `MAX = ``26``;` `// Function to update the freq[] array``// to store the frequencies of``// all the characters of str``static` `void` `updateFreq(String str, ``int` `freq[])``{``    ``int` `len = str.length();` `    ``// Update the frequency of the characters``    ``for` `(``int` `i = ``0``; i < len; i++)``    ``{``        ``freq[str.charAt(i) - ``'a'``]++;``    ``}``}` `// Function to return the maximum count``// of times patt can be formed``// using the characters of str``static` `int` `maxCount(String str, String patt)``{` `    ``// To store the frequencies of``    ``// all the characters of str``    ``int` `[]strFreq = ``new` `int``[MAX];``    ``updateFreq(str, strFreq);` `    ``// To store the frequencies of``    ``// all the characters of patt``    ``int` `[]pattFreq = ``new` `int``[MAX];``    ``updateFreq(patt, pattFreq);` `    ``// To store the result``    ``int` `ans = Integer.MAX_VALUE;` `    ``// For every character``    ``for` `(``int` `i = ``0``; i < MAX; i++)``    ``{` `        ``// If the current character``        ``// doesn't appear in patt``        ``if` `(pattFreq[i] == ``0``)``            ``continue``;` `        ``// Update the result``        ``ans = Math.min(ans, strFreq[i] / pattFreq[i]);``    ``}``    ``return` `ans;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``String str = ``"geeksforgeeks"``;``    ``String patt = ``"geeks"``;` `    ``System.out.print(maxCount(str, patt));``}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 implementation of the approach``MAX` `=` `26` `# Function to update the freq[] array``# to store the frequencies of``# all the characters of strr``def` `updateFreq(strr, freq):``    ``lenn ``=` `len``(strr)` `    ``# Update the frequency of the characters``    ``for` `i ``in` `range``(lenn):``        ``freq[``ord``(strr[i]) ``-` `ord``(``'a'``)] ``+``=` `1` `# Function to return the maximum count``# of times patt can be formed``# using the characters of strr``def` `maxCount(strr, patt):` `    ``# To store the frequencies of``    ``# all the characters of strr``    ``strrFreq ``=` `[``0` `for` `i ``in` `range``(``MAX``)]``    ``updateFreq(strr, strrFreq)` `    ``# To store the frequencies of``    ``# all the characters of patt``    ``pattFreq ``=` `[``0` `for` `i ``in` `range``(``MAX``)]``    ``updateFreq(patt, pattFreq)` `    ``# To store the result``    ``ans ``=` `10``*``*``9` `    ``# For every character``    ``for` `i ``in` `range``(``MAX``):` `        ``# If the current character``        ``# doesn't appear in patt``        ``if` `(pattFreq[i] ``=``=` `0``):``            ``continue` `        ``# Update the result``        ``ans ``=` `min``(ans, strrFreq[i] ``/``/` `pattFreq[i])` `    ``return` `ans` `# Driver code``strr ``=` `"geeksforgeeks"``patt ``=` `"geeks"` `print``(maxCount(strr, patt))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{` `static` `int` `MAX = 26;` `// Function to update the []freq array``// to store the frequencies of``// all the characters of str``static` `void` `updateFreq(String str, ``int` `[]freq)``{``    ``int` `len = str.Length;` `    ``// Update the frequency of the characters``    ``for` `(``int` `i = 0; i < len; i++)``    ``{``        ``freq[str[i] - ``'a'``]++;``    ``}``}` `// Function to return the maximum count``// of times patt can be formed``// using the characters of str``static` `int` `maxCount(String str, String patt)``{` `    ``// To store the frequencies of``    ``// all the characters of str``    ``int` `[]strFreq = ``new` `int``[MAX];``    ``updateFreq(str, strFreq);` `    ``// To store the frequencies of``    ``// all the characters of patt``    ``int` `[]pattFreq = ``new` `int``[MAX];``    ``updateFreq(patt, pattFreq);` `    ``// To store the result``    ``int` `ans = ``int``.MaxValue;` `    ``// For every character``    ``for` `(``int` `i = 0; i < MAX; i++)``    ``{` `        ``// If the current character``        ``// doesn't appear in patt``        ``if` `(pattFreq[i] == 0)``            ``continue``;` `        ``// Update the result``        ``ans = Math.Min(ans, strFreq[i] / pattFreq[i]);``    ``}``    ``return` `ans;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``String str = ``"geeksforgeeks"``;``    ``String patt = ``"geeks"``;` `    ``Console.Write(maxCount(str, patt));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output:
`2`

Time Complexity: O(MAX)

Auxiliary Space: O(MAX)

My Personal Notes arrow_drop_up