给定一个字符串str和两个整数P和Q。任务是找到可以通过从给定的字符串精确选择P个辅音和Q个元音来形成的单词总数。
例子:
Input: str = “geek”, P = 1, Q = 1
Output: 8
“ge”, “ge”, “eg”, “ek”, “eg”, “ek”,
“ke” and “ke” are the possible words.
Input: str = “crackathon”, P = 4, Q = 3
Output: 176400
方法:由于必须从给定字符串的辅音和元音的原始计数中选择P个辅音和Q个元音。因此,可以使用二项式系数来计算选择这些字符的组合,并且可以使用其计数的阶乘将选择的字符排列在自身中。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
#define lli long long int
// Function to return the value of nCk
lli binomialCoeff(lli n, lli k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1)
+ binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
lli fact(lli n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
bool isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i'
|| ch == 'o' || ch == 'u') {
return true;
}
return false;
}
// Function to return the number of words possible
lli countWords(string s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
lli countc = 0, countv = 0;
for (int i = 0; i < s.length(); i++) {
// If current character is a vowel
if (isVowel(s[i]))
countv++;
else
countc++;
}
// Find the total possible words
lli a = binomialCoeff(countc, p);
lli b = binomialCoeff(countv, q);
lli c = fact(p + q);
lli ans = (a * b) * c;
return ans;
}
// Driver code
int main()
{
string s = "crackathon";
int p = 4, q = 3;
cout << countWords(s, p, q);
return 0;
}
Java
// Java implementation of the above approach
class GFG
{
// Function to return the value of nCk
static long binomialCoeff(long n, long k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1) +
binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
static long fact(long n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
static boolean isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch == 'u')
{
return true;
}
return false;
}
// Function to return the number of words possible
static long countWords(String s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
long countc = 0, countv = 0;
for (int i = 0; i < s.length(); i++)
{
// If current character is a vowel
if (isVowel(s.charAt(i)))
countv++;
else
countc++;
}
// Find the total possible words
long a = binomialCoeff(countc, p);
long b = binomialCoeff(countv, q);
long c = fact(p + q);
long ans = (a * b) * c;
return ans;
}
// Driver code
public static void main (String[] args)
{
String s = "crackathon";
int p = 4, q = 3;
System.out.println(countWords(s, p, q));
}
}
// This Code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach
# Function to return the value of nCk
def binomialCoeff(n, k):
if (k == 0 or k == n):
return 1
return binomialCoeff(n - 1, k - 1) + \
binomialCoeff(n - 1, k)
# Function to return the factorial of n
def fact(n):
if (n >= 1):
return n * fact(n - 1)
else:
return 1
# Function that returns true if ch is a vowel
def isVowel(ch):
if (ch == 'a' or ch == 'e' or
ch == 'i' or ch == 'o' or ch == 'u'):
return True
return False
# Function to return the number of words possible
def countWords(s, p, q):
# To store the count of vowels and
# consonanats in the given string
countc = 0
countv = 0
for i in range(len(s)):
# If current character is a vowel
if (isVowel(s[i])):
countv += 1
else:
countc += 1
# Find the total possible words
a = binomialCoeff(countc, p)
b = binomialCoeff(countv, q)
c = fact(p + q)
ans = (a * b) * c
return ans
# Driver code
s = "crackathon"
p = 4
q = 3
print(countWords(s, p, q))
# This code is contributed by Mohit Kumar
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to return the value of nCk
static long binomialCoeff(long n, long k)
{
if (k == 0 || k == n)
return 1;
return binomialCoeff(n - 1, k - 1) +
binomialCoeff(n - 1, k);
}
// Function to return the factorial of n
static long fact(long n)
{
if (n >= 1)
return n * fact(n - 1);
else
return 1;
}
// Function that returns true if ch is a vowel
static bool isVowel(char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch == 'u')
{
return true;
}
return false;
}
// Function to return the number of words possible
static long countWords(String s, int p, int q)
{
// To store the count of vowels and
// consonanats in the given string
long countc = 0, countv = 0;
for (int i = 0; i < s.Length; i++)
{
// If current character is a vowel
if (isVowel(s[i]))
countv++;
else
countc++;
}
// Find the total possible words
long a = binomialCoeff(countc, p);
long b = binomialCoeff(countv, q);
long c = fact(p + q);
long ans = (a * b) * c;
return ans;
}
// Driver code
public static void Main (String[] args)
{
String s = "crackathon";
int p = 4, q = 3;
Console.WriteLine(countWords(s, p, q));
}
}
// This code is contributed by PrinciRaj1992
Javascript
输出:
176400