Compruebe si la segunda string se puede formar a partir de los caracteres de la primera string

Dadas dos strings str1 y str2, verifique si str2 se puede formar a partir de str1

Ejemplo : 

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. 

La idea es contar frecuencias de caracteres de str1 en una array de conteo. Luego, recorra str2 y disminuya la frecuencia de los caracteres de str2 en la array de conteo. Si la frecuencia de un carácter se vuelve negativa en algún momento, devuelve falso.

A continuación se muestra la implementación del enfoque anterior: 

C++

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

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

# Python program to check whether second string
# can be formed from first string
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.get(s2[i]) == None or 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")

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

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

Javascript

<script>
    // Javascript program to check whether second string
    // can be formed from first string
     
    let MAX = 256;
   
    function canMakeStr2(str1, str2)
    {
        // Create a count array and count frequencies
        // characters in str1.
        let count = new Array(MAX);
        count.fill(0);
        for (let i = 0; i < str1.length; i++)
            count[str1[i]]++;
   
        // Now traverse through str2 to check
        // if every character has enough counts
        for (let i = 0; i < str2.length; i++) {
            if (count[str2[i]] == 0)
                return false;
            count[str2[i]]--;
        }
        return true;
    }
     
    let str1 = "geekforgeeks";
    let str2 = "for";
    if (canMakeStr2(str1, str2))
      document.write("Yes");
    else
      document.write("No");
             
</script>
Producción

Yes

Complejidad de tiempo: O(n+m) , donde n y m son la longitud de las strings dadas. 
Espacio Auxiliar: O(256) , que es constante.

Publicación traducida automáticamente

Artículo escrito por anuragrawat1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *