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. 



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to check whether second string
// can be formed from first string
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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");
    }
  

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to check whether 
// second string can be formed 
// from first string
$MAX = 256;
  
function canMakeStr2($str1, $str2)
{
    // Create a count array and 
    // count frequencies characters 
    // in str1.
    $count = (0);
    for ($i = 0; $i < strlen($str1); $i++)
      
    // Now traverse through str2 
    // to check if every character
    // has enough counts
    for ($i = 0; $i < strlen($str2); $i++)
    {
        if ($count[$str2[$i]] == 0)
        return -1;
    }
    return true;
}
  
// Driver Code
$str1 = "geekforgeeks";
$str2 = "for";
if (canMakeStr2($str1, $str2))
echo "Yes";
else
echo "No";
  
// This code is contributed by ajit
?>

chevron_right



Output :

Yes


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.