# Check whether second string can be formed from characters of first string

Given two strings str1 and str2, check if str2 can be formed from str1

Example :

```Input : str1 = geekforgeeks, str2 = geeks
Output : Yes
Here, string2 can be formed from string1.

Input : str1 = geekforgeeks, str2 = and
Output :  No
Here string2 cannot be formed from string1.

Input : str1 = geekforgeeks, str2 = geeeek
Output :  Yes
Here string2 can be formed from string1
as string1 contains 'e' comes 4 times in
string2 which is present in string1. ```

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

The idea is to count frequencies of characters of str1 in a count array. Then traverse str2 and decrease frequency of characters of str2 in the count array. If frequency of a characters becomes negative at any point, return false.

Below is the implementation of above approach :

## C++

 `// CPP program to check whether second string ` `// can be formed from first string ` `#include ` `using` `namespace` `std; ` `const` `int` `MAX = 256; ` ` `  `bool` `canMakeStr2(string str1, string str2) ` `{ ` `    ``// Create a count array and count frequencies ` `    ``// characters in str1. ` `    ``int` `count[MAX] = {0}; ` `    ``for` `(``int` `i = 0; i < str1.length(); i++) ` `        ``count[str1[i]]++; ` `         `  `    ``// Now traverse through str2 to check ` `    ``// if every character has enough counts ` `    ``for` `(``int` `i = 0; i < str2.length(); i++) ` `    ``{ ` `        ``if` `(count[str2[i]] == 0) ` `           ``return` `false``; ` `        ``count[str2[i]]--; ` `    ``} ` `    ``return` `true``; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``string str1 = ``"geekforgeeks"``; ` `    ``string str2 = ``"for"``; ` `    ``if` `(canMakeStr2(str1, str2)) ` `       ``cout << ``"Yes"``; ` `    ``else` `       ``cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to check whether second string ` `// can be formed from first string ` `  `  `class` `GFG { ` `  `  `    ``static` `int` `MAX = ``256``; ` `  `  `    ``static` `boolean` `canMakeStr2(String str1, String str2) ` `    ``{ ` `        ``// Create a count array and count frequencies ` `        ``// characters in str1. ` `        ``int``[] count = ``new` `int``[MAX]; ` `        ``char` `[]str3 = str1.toCharArray(); ` `        ``for` `(``int` `i = ``0``; i < str3.length; i++) ` `            ``count[str3[i]]++; ` `  `  `        ``// Now traverse through str2 to check ` `        ``// if every character has enough counts ` `         `  `        ``char` `[]str4 = str2.toCharArray(); ` `        ``for` `(``int` `i = ``0``; i < str4.length; i++) { ` `            ``if` `(count[str4[i]] == ``0``) ` `                ``return` `false``; ` `            ``count[str4[i]]--; ` `        ``} ` `        ``return` `true``; ` `    ``} ` `  `  `    ``// Driver Code ` `    ``static` `public` `void` `main(String []args) ` `    ``{ ` `        ``String str1 = ``"geekforgeeks"``; ` `        ``String str2 = ``"for"``; ` `        ``if` `(canMakeStr2(str1, str2)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `}  ` ` `

## Python3

 `# Python3 implmentation of the approach ` `MAX` `=` `256` ` `  `def` `canMakeStr2(s1, s2): ` ` `  `    ``# Create a count array and count  ` `    ``# frequencies characters in s1 ` `    ``count ``=` `{s1[i] : ``0` `for` `i ``in` `range``(``len``(s1))} ` `     `  `    ``for` `i ``in` `range``(``len``(s1)): ` `        ``count[s1[i]] ``+``=` `1` `     `  `    ``# Now traverse through str2 to check  ` `    ``# if every character has enough counts ` `    ``for` `i ``in` `range``(``len``(s2)): ` `        ``if` `count[s2[i]] ``=``=` `0``: ` `            ``return` `False` `        ``count[s2[i]] ``-``=` `1` `    ``return` `True` ` `  `# Driver Code ` `s1 ``=` `"geekforgeeks"` `s2 ``=` `"for"` ` `  `if` `canMakeStr2(s1, s2): ` `    ``print``(``"Yes"``) ` `else``: ` `    ``print``(``"No"``) ` ` `  `# This code is contributed ` `# by Mohit kumar 29 `

## C#

 `// C# program to check whether second string ` `// can be formed from first string ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``static` `int` `MAX = 256; ` ` `  `    ``static` `bool` `canMakeStr2(``string` `str1, ``string` `str2) ` `    ``{ ` `        ``// Create a count array and count frequencies ` `        ``// characters in str1. ` `        ``int``[] count = ``new` `int``[MAX]; ` `        ``for` `(``int` `i = 0; i < str1.Length; i++) ` `            ``count[str1[i]]++; ` ` `  `        ``// Now traverse through str2 to check ` `        ``// if every character has enough counts ` `        ``for` `(``int` `i = 0; i < str2.Length; i++) { ` `            ``if` `(count[str2[i]] == 0) ` `                ``return` `false``; ` `            ``count[str2[i]]--; ` `        ``} ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``static` `public` `void` `Main() ` `    ``{ ` `        ``string` `str1 = ``"geekforgeeks"``; ` `        ``string` `str2 = ``"for"``; ` `        ``if` `(canMakeStr2(str1, str2)) ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` `    ``} ` `}  ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` `

Output :

```Yes
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.