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

📅  最后修改于: 2021-10-27 08:22:18             🧑  作者: Mango

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

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

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

做法:将str2的字符出现频率存入hash2,将str1存入hash1。现在,找出所有 i 的 hash1[i]/hash2[i] 的最小值,其中 hash2[i]>0。
下面是上述方法的实现:

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


Javascript


输出:
3

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程