# Permutations of string such that no two vowels are adjacent

Given a string consisting of vowels and consonants. The task is to find the number of ways in which the characters of the string can be arranged such that no two vowels are adjacent to each other.

Note: Given that No. of vowels <= No. of consonants.

Examples:

Input: str = "permutation"
Output : 907200

Input: str = "geeksforgeeks"
Output: 3175200


## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:
Consider the above example string “permutation”:

• First place all of the consonants at the alternate places like below:
-- p -- r -- m -- t -- t -- n --


Number of ways to place consonants = 6! / 2!. as appears twice and should be considered once.

• Then place the vowels at the remaining positions. We have 7 remaining positions and 5 vowels to fill these 7 places.
Therefore, number of ways to fill vowels = .
Total no. of ways = = 907200


Suppose in a string number of vowels is vowelCount and the number of consonants is consonantCount.

Therefore,

Total ways = (consonantCount! / duplicateConsonant!) * C(consonantCount+1 , vowelCount) * (vowelCount! / duplicateVowel!)

Below is the implementation of the above approach:

## C++

 // CPP program to count permutations of string  // such that no two vowels are adjacent     #include  using namespace std;     // Factorial of a number  int factorial(int n)  {         int fact = 1;      for (int i = 2; i <= n; i++)          fact = fact * i;         return fact;  }     // Function to find c(n, r)  int ncr(int n, int r)  {      return factorial(n) / (factorial(r) * factorial(n - r));  }     // Function to count permutations of string  // such that no two vowels are adjacent  int countWays(string str)  {      int freq = { 0 };      int nvowels = 0, nconsonants = 0;         int vplaces, cways, vways;         // Finding the frequencies of      // the characters      for (int i = 0; i < str.length(); i++)          ++freq[str[i] - 'a'];         // finding the no. of vowels and      // consonants in given word      for (int i = 0; i < 26; i++) {             if (i == 0 || i == 4 || i == 8              || i == 14 || i == 20)              nvowels += freq[i];          else             nconsonants += freq[i];      }      // finding places for the vowels      vplaces = nconsonants + 1;         // ways to fill consonants 6! / 2!      cways = factorial(nconsonants);      for (int i = 0; i < 26; i++) {          if (i != 0 && i != 4 && i != 8 && i != 14              && i != 20 && freq[i] > 1) {                 cways = cways / factorial(freq[i]);          }      }         // ways to put vowels 7C5 x 5!      vways = ncr(vplaces, nvowels) * factorial(nvowels);      for (int i = 0; i < 26; i++) {          if (i == 0 || i == 4 || i == 8 || i == 14              || i == 20 && freq[i] > 1) {              vways = vways / factorial(freq[i]);          }      }         return cways * vways;  }     // Driver code  int main()  {      string str = "permutation";         cout << countWays(str) << endl;         return 0;  }

## Java

 // Java program to count permutations of string  // such that no two vowels are adjacent     class GFG  {                         // Factorial of a number          static int factorial(int n)          {                         int fact = 1;              for (int i = 2; i <= n; i++)                  fact = fact * i;                         return fact;          }                     // Function to find c(n, r)          static int ncr(int n, int r)          {              return factorial(n) / (factorial(r) * factorial(n - r));          }                     // Function to count permutations of string          // such that no two vowels are adjacent          static int countWays(String str)          {              int freq[]=new int;                             for(int i=0;i<26;i++)              {                  freq[i]=0;              }                             int nvowels = 0, nconsonants = 0;                         int vplaces, cways, vways;                         // Finding the frequencies of              // the characters              for (int i = 0; i < str.length(); i++)                  ++freq[str.charAt(i) - 'a'];                         // finding the no. of vowels and              // consonants in given word              for (int i = 0; i < 26; i++) {                             if (i == 0 || i == 4 || i == 8                     || i == 14 || i == 20)                      nvowels += freq[i];                  else                     nconsonants += freq[i];              }              // finding places for the vowels              vplaces = nconsonants + 1;                         // ways to fill consonants 6! / 2!              cways = factorial(nconsonants);              for (int i = 0; i < 26; i++) {                  if (i != 0 && i != 4 && i != 8 && i != 14                     && i != 20 && freq[i] > 1) {                                 cways = cways / factorial(freq[i]);                  }              }                         // ways to put vowels 7C5 x 5!              vways = ncr(vplaces, nvowels) * factorial(nvowels);              for (int i = 0; i < 26; i++) {                  if (i == 0 || i == 4 || i == 8 || i == 14                     || i == 20 && freq[i] > 1) {                      vways = vways / factorial(freq[i]);                  }              }                         return cways * vways;          }                     // Driver code          public static void main(String []args)          {              String str = "permutation";                         System.out.println(countWays(str));                                }  }     // This code is contributed  // by ihritik

## Python3

 # Python3 program to count permutations of   # string such that no two vowels are adjacent      # Factorial of a number   def factorial(n) :          fact = 1;       for i in range(2, n + 1) :          fact = fact * i         return fact     # Function to find c(n, r)   def ncr(n, r) :             return factorial(n) // (factorial(r) *                              factorial(n - r))     # Function to count permutations of string   # such that no two vowels are adjacent   def countWays(string) :          freq =  * 26     nvowels, nconsonants = 0, 0        # Finding the frequencies of       # the characters       for i in range(len(string)) :          freq[ord(string[i]) - ord('a')] += 1        # finding the no. of vowels and       # consonants in given word       for i in range(26) :             if (i == 0 or i == 4 or i == 8             or i == 14 or i == 20) :              nvowels += freq[i]           else :              nconsonants += freq[i]             # finding places for the vowels       vplaces = nconsonants + 1        # ways to fill consonants 6! / 2!       cways = factorial(nconsonants)      for i in range(26) :          if (i != 0 and i != 4 and i != 8 and             i != 14 and i != 20 and freq[i] > 1) :                  cways = cways // factorial(freq[i])         # ways to put vowels 7C5 x 5!       vways = ncr(vplaces, nvowels) * factorial(nvowels)      for i in range(26) :          if (i == 0 or i == 4 or i == 8 or i == 14             or i == 20 and freq[i] > 1) :              vways = vways // factorial(freq[i])          return cways * vways;      # Driver code   if __name__ == "__main__" :         string = "permutation"        print(countWays(string))     # This code is contributed by Ryuga

## C#

 // C# program to count permutations of string  // such that no two vowels are adjacent     using System;  class GFG  {                         // Factorial of a number          static int factorial(int n)          {                         int fact = 1;              for (int i = 2; i <= n; i++)                  fact = fact * i;                         return fact;          }                     // Function to find c(n, r)          static int ncr(int n, int r)          {              return factorial(n) / (factorial(r) * factorial(n - r));          }                     // Function to count permutations of string          // such that no two vowels are adjacent          static int countWays(String str)          {              int []freq=new int;                             for(int i=0;i<26;i++)              {                  freq[i]=0;              }                             int nvowels = 0, nconsonants = 0;                         int vplaces, cways, vways;                         // Finding the frequencies of              // the characters              for (int i = 0; i < str.Length; i++)                  ++freq[str[i] - 'a'];                         // finding the no. of vowels and              // consonants in given word              for (int i = 0; i < 26; i++) {                             if (i == 0 || i == 4 || i == 8                      || i == 14 || i == 20)                      nvowels += freq[i];                  else                     nconsonants += freq[i];              }              // finding places for the vowels              vplaces = nconsonants + 1;                         // ways to fill consonants 6! / 2!              cways = factorial(nconsonants);              for (int i = 0; i < 26; i++) {                  if (i != 0 && i != 4 && i != 8 && i != 14                      && i != 20 && freq[i] > 1) {                                 cways = cways / factorial(freq[i]);                  }              }                         // ways to put vowels 7C5 x 5!              vways = ncr(vplaces, nvowels) * factorial(nvowels);              for (int i = 0; i < 26; i++) {                  if (i == 0 || i == 4 || i == 8 || i == 14                      || i == 20 && freq[i] > 1) {                      vways = vways / factorial(freq[i]);                  }              }                         return cways * vways;          }                     // Driver code          public static void Main()          {              String str = "permutation";                         Console.WriteLine(countWays(str));                                }  }     // This code is contributed  // by ihritik

## PHP

  1) {                  $cways = $cways / factorial($freq[$i]);          }      }          // ways to put vowels 7C5 x 5!      $vways = ncr($vplaces, $nvowels) * factorial($nvowels);      for ($i = 0; $i < 26; $i++) {   if ($i == 0 || $i == 4 || $i == 8 || $i == 14   || $i == 20 && $freq[$i] > 1) {              $vways = $vways / factorial($freq[$i]);          }      }      return $cways * $vways;  }      // Driver code     $str = "permutation";  echo countWays($str)."\n";  return 0;  // this code is contributed by Ita_c.  ?>

Output:

907200


My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : ihritik, AnkitRai01, Ita_c