Arrangement of words without changing the relative position of vowel and consonants - GeeksforGeeks

07 May, 2021
Given a word of length less than 10, the task is to find a number of ways in which it can be arranged without changing the relative position of vowel and consonants.Examples:  
Input: "GEEKS"
Output: 6

Input: "COMPUTER"
Output: 720
 
Approach: 
Count the vowels and consonants in the wordNow find total number of ways to arrange vowel onlyThen find ways to arrange consonant only.Multiply both answer to get the Total ways = (no of ways to arrange vowel only)*(no of ways to arrange consonant only)
Count the vowels and consonants in the word
Now find total number of ways to arrange vowel only
Then find ways to arrange consonant only.
Multiply both answer to get the Total ways = (no of ways to arrange vowel only)*(no of ways to arrange consonant only)
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ program for Arrangement of words// without changing the relative position of// vowel and consonants#include <bits/stdc++.h>using namespace std; #define ll long int // this function return n!ll factorial(ll n){    ll res = 1;    for (int i = 1; i <= n; i++)        res = res * i;     return res;} // this will return total number of waysll count(string word){     // freq maintains frequency    // of each character in word    ll freq[27] = { 0 };     ll vowel = 0, consonant = 0;    for (int i = 0; i < word.length(); i++) {        freq[word[i] - 'A']++;         // check character is vowel or not        if (word[i] == 'A' || word[i] == 'E'            || word[i] == 'I'            || word[i] == 'O' || word[i] == 'U') {            vowel++;        }         // the characters that are not vowel        // must be consonant        else            consonant++;    }     // number of ways to arrange vowel    ll vowelArrange;    vowelArrange = factorial(vowel);    vowelArrange /= factorial(freq[0]);    vowelArrange /= factorial(freq[4]);    vowelArrange /= factorial(freq[8]);    vowelArrange /= factorial(freq[14]);    vowelArrange /= factorial(freq[20]);     ll consonantArrange;    consonantArrange = factorial(consonant);    for (int i = 0; i < 26; i++) {        if (i != 0 && i != 4 && i != 8 && i != 14 && i != 20)            consonantArrange /= factorial(freq[i]);    }     // multiply both as these are independent    ll total = vowelArrange * consonantArrange;    return total;} // Driver functionint main(){    // string contains only    // capital letters    string word = "COMPUTER";     // this will contain ans    ll ans = count(word);    cout << ans << endl;    return 0;}
// Java program for Arrangement of words// without changing the relative position of// vowel and consonants class GFG{         // this function return n!    static long factorial(long n)    {        long res = 1;        for (int i = 1; i <= n; i++)            res = res * i;             return res;    }         // this will return total number of ways    static long count(String word)    {             // freq maintains frequency        // of each character in word        int freq[] =new int[27];                 for(int i=0;i<27;i++)            freq[i]=0;             long vowel = 0, consonant = 0;        for (int i = 0; i < word.length(); i++) {            freq[word.charAt(i) - 'A']++;                 // check character is vowel or not            if (word.charAt(i) == 'A' || word.charAt(i) == 'E'                || word.charAt(i) == 'I'                || word.charAt(i) == 'O' || word.charAt(i) == 'U') {                vowel++;            }                 // the characters that are not vowel            // must be consonant            else                consonant++;        }             // number of ways to arrange vowel        long vowelArrange;        vowelArrange = factorial(vowel);        vowelArrange /= factorial(freq[0]);        vowelArrange /= factorial(freq[4]);        vowelArrange /= factorial(freq[8]);        vowelArrange /= factorial(freq[14]);        vowelArrange /= factorial(freq[20]);             long consonantArrange;        consonantArrange = factorial(consonant);        for (int i = 0; i < 26; i++) {            if (i != 0 && i != 4 && i != 8 && i != 14 && i != 20)                consonantArrange /= factorial(freq[i]);        }             // multiply both as these are independent        long total = vowelArrange * consonantArrange;        return total;    }         // Driver function    public static void main(String []args)    {        // string contains only        // capital letters        String word = "COMPUTER";             // this will contain ans        long ans = count(word);        System.out.println(ans);     } } // This code is contributed by ihritik
# Python3 program for Arrangement of words# without changing the relative position of# vowel and consonants # this function return n!def factorial(n):    res = 1    for i in range(1, n + 1):        res = res * i    return res # this will return total number of waysdef count(word):         # freq maintains frequency    # of each character in word    freq = [0 for i in range(30)]    vowel = 0    consonant = 0    for i in range(len(word)):        freq[ord(word[i]) -65 ] += 1                 # check character is vowel or not        if(word[i] == 'A'or word[i] == 'E' or           word[i] == 'I' or word[i] == 'O'or           word[i] == 'U'):            vowel += 1         # the characters that are not        # vowel must be consonant        else:            consonant += 1     # number of ways to arrange vowel    vowelArrange = factorial(vowel)    vowelArrange //= factorial(freq[0])    vowelArrange //= factorial(freq[4])    vowelArrange //= factorial(freq[8])    vowelArrange //= factorial(freq[14])    vowelArrange //= factorial(freq[20])     consonantArrange = factorial(consonant)    for i in range(26):        if(i != 0 and i != 4 and i != 8 and           i != 14 and i != 20):            consonantArrange//= factorial(freq[i])     # multiply both as these are independent    total = vowelArrange * consonantArrange    return total # Driver code # string contains only# capital lettersword = "COMPUTER" # this will contain ansans = count(word)print(ans) # This code is contributed# by sahilshelangia
// C# program for Arrangement of words// without changing the relative position of// vowel and consonantsusing System;class GFG{         // this function return n!    static long factorial(long n)    {        long res = 1;        for (int i = 1; i <= n; i++)            res = res * i;             return res;    }         // this will return total number of ways    static long count(string word)    {             // freq maintains frequency        // of each character in word        int []freq =new int[27];                 for(int i=0;i<27;i++)            freq[i]=0;             long vowel = 0, consonant = 0;        for (int i = 0; i < word.Length; i++) {            freq[word[i] - 'A']++;                 // check character is vowel or not            if (word[i] == 'A' || word[i] == 'E'                || word[i] == 'I'                || word[i] == 'O' || word[i] == 'U') {                vowel++;            }                 // the characters that are not vowel            // must be consonant            else                consonant++;        }             // number of ways to arrange vowel        long vowelArrange;        vowelArrange = factorial(vowel);        vowelArrange /= factorial(freq[0]);        vowelArrange /= factorial(freq[4]);        vowelArrange /= factorial(freq[8]);        vowelArrange /= factorial(freq[14]);        vowelArrange /= factorial(freq[20]);             long consonantArrange;        consonantArrange = factorial(consonant);        for (int i = 0; i < 26; i++) {            if (i != 0 && i != 4 && i != 8 && i != 14 && i != 20)                consonantArrange /= factorial(freq[i]);        }             // multiply both as these are independent        long total = vowelArrange * consonantArrange;        return total;    }         // Driver function    public static void Main()    {        // string contains only        // capital letters        string word = "COMPUTER";             // this will contain ans        long ans = count(word);        Console.WriteLine(ans);     } }// This code is contributed by ihritik
<?php// PHP program for Arrangement of words// without changing the relative position// of vowel and consonants     // this function return n!function factorial($n){    $res = 1;    for ($i = 1; $i <= $n; $i++)        $res = $res * $i;     return $res;} // this will return total// number of waysfunction count1($word){     // freq maintains frequency    // of each character in word    $freq = array_fill(0, 27, 0);         for($i = 0; $i < 27; $i++)        $freq[$i] = 0;     $vowel = 0;    $consonant = 0;    for ($i = 0; $i < strlen($word); $i++)    {        $freq[ord($word[$i]) - 65]++;         // check character is vowel or not        if ($word[$i] == 'A' || $word[$i] == 'E' ||            $word[$i] == 'I' || $word[$i] == 'O' ||            $word[$i] == 'U')        {            $vowel++;        }         // the characters that are not        // vowel must be consonant        else            $consonant++;    }     // number of ways to arrange vowel    $vowelArrange = factorial($vowel);    $vowelArrange /= factorial($freq[0]);    $vowelArrange /= factorial($freq[4]);    $vowelArrange /= factorial($freq[8]);    $vowelArrange /= factorial($freq[14]);    $vowelArrange /= factorial($freq[20]);     $consonantArrange = factorial($consonant);    for ($i = 0; $i < 26; $i++)    {        if ($i != 0 && $i != 4 && $i != 8 &&                       $i != 14 && $i != 20)            $consonantArrange /= factorial($freq[$i]);    }     // multiply both as these    // are independent    $total = $vowelArrange * $consonantArrange;    return $total;} // Driver Code // string contains only// capital letters$word = "COMPUTER"; // this will contain ans$ans = count1($word);echo ($ans); // This code is contributed by mits?>
// Javascript program for Arrangement of words// without changing the relative position// of vowel and consonants     // this function return n!function factorial(n){    let res = 1;    for (let i = 1; i <= n; i++)        res = res * i;     return res;} // this will return total// number of waysfunction count1(word){     // freq maintains frequency    // of each character in word    let freq = new Array(27).fill(0);         for(let i = 0; i < 27; i++)        freq[i] = 0;     let vowel = 0;    let consonant = 0;    for (let i = 0; i < word.length; i++)    {        freq[word.charCodeAt(i) - 65]++;         // check character is vowel or not        if (word[i] == 'A' || word[i] == 'E' ||            word[i] == 'I' || word[i] == 'O' ||            word[i] == 'U')        {            vowel++;        }         // the characters that are not        // vowel must be consonant        else            consonant++;    }     // number of ways to arrange vowel    vowelArrange = factorial(vowel);    vowelArrange /= factorial(freq[0]);    vowelArrange /= factorial(freq[4]);    vowelArrange /= factorial(freq[8]);    vowelArrange /= factorial(freq[14]);    vowelArrange /= factorial(freq[20]);     consonantArrange = factorial(consonant);    for (let i = 0; i < 26; i++)    {        if (i != 0 && i != 4 && i != 8 &&                    i != 14 && i != 20)            consonantArrange /= factorial(freq[i]);    }     // multiply both as these    // are independent    let total = vowelArrange * consonantArrange;    return total;} // Driver Code // string contains only// capital letterslet word = "COMPUTER"; // this will contain anslet ans = count1(word);document.write(ans); // This code is contributed by gfgking
720
 
sahilshelangia
ihritik
Mithun Kumar
gfgking
factorial
vowel-consonant
Hash
Mathematical
Strings
Hash
Strings
Mathematical
factorial
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Quadratic Probing in Hashing
Rearrange an array such that arr[i] = i
Hashing in Java
Non-Repeating Element
What are Hash Functions and How to choose a good Hash Function?
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7