📌  相关文章
📜  可以使用给定字符串的准确P个辅音和Q个元音构成的单词数

📅  最后修改于: 2021-04-26 08:17:15             🧑  作者: Mango

给定一个字符串str和两个整数PQ。任务是找到可以通过从给定的字符串精确选择P个辅音和Q个元音来形成的单词总数。
例子:

方法:由于必须从给定字符串的辅音和元音的原始计数中选择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