📌  相关文章
📜  计算可以从另一个给定字符串构造的字符串的出现次数

📅  最后修改于: 2021-04-23 19:14:20             🧑  作者: Mango

给定两个字符串str1str2 ,其中str1是父字符串。任务是找出可以使用str1字母构造的字符串str2的数量。
注意:所有字母均为小写字母,每个字符只能使用一次。

例子:

Input: str1 = "geeksforgeeks", str2 = "geeks"
Output: 2

Input: str1 = "geekgoinggeeky", str2 = "geeks"
Output: 0

方法:将str2的字符频率存储在hash2中,并对str1中的str1进行相同的操作。现在,找出hash2 [i]> 0的所有i的hash1 [i] / hash2 [i]的最小值。

下面是上述方法的实现:

C++
// C++ implementation of the above approach
#include 
using namespace std;
  
// Function to find the count
int findCount(string str1, string str2)
{
    int len = str1.size();
    int len2 = str2.size();
    int ans = INT_MAX;
  
    // Initialize hash for both strings
    int hash1[26] = { 0 }, hash2[26] = { 0 };
  
    // hash the frequency of letters of str1
    for (int i = 0; i < len; i++)
        hash1[str1[i] - 'a']++;
  
    // hash the frequency of letters of str2
    for (int i = 0; i < len2; i++)
        hash2[str2[i] - 'a']++;
  
    // Find the count of str2 constructed from str1
    for (int i = 0; i < 26; i++)
        if (hash2[i])
            ans = min(ans, hash1[i] / hash2[i]);
  
    // Return answer
    return ans;
}
  
// Driver code
int main()
{
    string str1 = "geeksclassesatnoida";
    string str2 = "sea";
    cout << findCount(str1, str2);
  
    return 0;
}


Java
// Java implementation of the above approach
class GFG
{
    // Function to find the count
    static int findCount(String str1, String str2)
    {
        int len = str1.length();
        int len2 = str2.length();
        int ans = Integer.MAX_VALUE;
      
        // Initialize hash for both strings
        int [] hash1 = new int[26];
        int [] hash2 = new int[26];
      
        // hash the frequency of letters of str1
        for (int i = 0; i < len; i++)
            hash1[(int)(str1.charAt(i) - 'a')]++;
      
        // hash the frequency of letters of str2
        for (int i = 0; i < len2; i++)
            hash2[(int)(str2.charAt(i) - 'a')]++;
      
        // Find the count of str2 constructed from str1
        for (int i = 0; i < 26; i++)
            if (hash2[i] != 0)
                ans = Math.min(ans, hash1[i] / hash2[i]);
      
        // Return answer
        return ans;
    }
      
    // Driver code
    public static void main(String []args)
    {
        String str1 = "geeksclassesatnoida";
        String str2 = "sea";
        System.out.println(findCount(str1, str2));
    }
}
  
// This code is contributed by ihritik


Python3
# Python3 implementation of the above approach
  
import sys
  
# Function to find the count
def findCount(str1, str2):
  
    len1 = len(str1)
    len2 = len(str2)
    ans = sys.maxsize
  
    # Initialize hash for both strings
    hash1 = [0] * 26
    hash2 = [0] * 26
  
    # hash the frequency of letters of str1
    for i in range(0, len1):
        hash1[ord(str1[i]) - 97] = hash1[ord(str1[i]) - 97] + 1
  
    # hash the frequency of letters of str2
    for i in range(0, len2):
        hash2[ord(str2[i]) - 97] = hash2[ord(str2[i]) - 97] + 1
          
    # Find the count of str2 constructed from str1
    for i in range (0, 26):
        if (hash2[i] != 0):
            ans = min(ans, hash1[i] // hash2[i])
  
    # Return answer
    return ans
  
      
# Driver code
str1 = "geeksclassesatnoida"
str2 = "sea"
print(findCount(str1, str2))
  
# This code is contributed by ihritik


C#
// C# implementation of the above approach
using System;
  
class GFG
{
    // Function to find the count
    static int findCount(string str1, string str2)
    {
        int len = str1.Length;
        int len2 = str2.Length;
        int ans = Int32.MaxValue;
      
        // Initialize hash for both strings
        int [] hash1 = new int[26];
        int [] hash2 = new int[26];
      
        // hash the frequency of letters of str1
        for (int i = 0; i < len; i++)
            hash1[str1[i] - 'a']++;
      
        // hash the frequency of letters of str2
        for (int i = 0; i < len2; i++)
            hash2[str2[i] - 'a']++;
      
        // Find the count of str2 constructed from str1
        for (int i = 0; i < 26; i++)
            if (hash2[i] != 0)
                ans = Math.Min(ans, hash1[i] / hash2[i]);
      
        // Return answer
        return ans;
    }
      
    // Driver code
    public static void Main()
    {
        string str1 = "geeksclassesatnoida";
        string str2 = "sea";
        Console.WriteLine(findCount(str1, str2));
    }
}
  
// This code is contributed by ihritik


PHP


输出:
3