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