给定两个字符串str1和str2 ,其中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 现场工作专业课程和学生竞争性编程现场课程。