Arrangement of words without changing the relative position of vowel and consonants
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 vowels and consonants.
Examples:
Input: "GEEKS" Output: 6 Input: "COMPUTER" Output: 720
Approach
- 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++
// 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 ways ll 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 function int main() { // string contains only // capital letters string word = "COMPUTER" ; // this will contain ans ll ans = count(word); cout << ans << endl; return 0; } |
Java
// 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
# 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 ways def 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 letters word = "COMPUTER" # this will contain ans ans = count(word) print (ans) # This code is contributed # by sahilshelangia |
C#
// C# program for Arrangement of words // without changing the relative position of // vowel and consonants using 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 // 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 ways function 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
// 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 ways function 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 letters let word = "COMPUTER" ; // this will contain ans let ans = count1(word); document.write(ans); // This code is contributed by gfgking |
Output
720
Complexity Analysis:
- Time Complexity: O(n), where n is the size of the given string word
- Auxiliary Space: O(27)
Please Login to comment...