# Number of permutations of a string in which all the occurrences of a given character occurs together

Given a string ‘s’ and a character ‘c’, the task is to find the number of permutations of the string in which all the occurrences of the character ‘c’ will be together (one after another).

Examples :

Input: Str = “AKA” ch = ‘A’
Output: 2
All the unique permutations of AKA are : AKA, AAK and KAA
‘A’ comes consecutively only twice. Hence, the answer is 2

Input: str= “MISSISSIPPI” ch = ‘S’
Output: 840

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

Naive Approach:

• Generate all the permutations of the given string.
• For each permutation check whether all occurrences of the character appear together.
• Count of the permutations from the previous step is the answer.

Efficient Approach: Let the length of the string be ‘l’ and frequency of the character in the string be ‘n’.

• Store the frequency of every character of the string.
• If the character is not present in the string then the output will be ‘0’.
• Consider all the occurrences of the character as a combined single character.
• So, ‘l’ will become ‘l – occ + 1’ where ‘occ’ is the total occurrence of the given character and ‘l’ is the new length of the string.
• Return ( (Factorial of l) / (Product of the factorials of the no. of occurrences of each character except the given character) )

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return factorial ` `// of the number passed as argument ` `long` `long` `int` `fact(``int` `n) ` `{ ` `    ``long` `long` `result = 1; ` `    ``for` `(``int` `i = 1; i <= n; i++) ` `        ``result *= i; ` `    ``return` `result; ` `} ` ` `  `// Function to get the total permutations ` `// which satisfy the given condition ` `int` `getResult(string str, ``char` `ch) ` `{ ` `    ``// Create has to store count ` `    ``// of each character ` `    ``int` `has = { 0 }; ` ` `  `    ``// Store character occurrences ` `    ``for` `(``int` `i = 0; i < str.length(); i++) ` `        ``has[str[i] - ``'A'``]++; ` ` `  `    ``// Count number of times ` `    ``// Particular character comes ` `    ``int` `particular = has[ch - ``'A'``]; ` ` `  `    ``// If particular character isn't ` `    ``// present in the string then return 0 ` `    ``if` `(particular == 0) ` `        ``return` `0; ` ` `  `    ``// Remove count of particular character ` `    ``has[ch - ``'A'``] = 0; ` ` `  `    ``// Total length ` `    ``// of the string ` `    ``int` `total = str.length(); ` ` `  `    ``// Assume all occurrences of ` `    ``// particular character as a ` `    ``// single character. ` `    ``total = total - particular + 1; ` ` `  `    ``// Compute factorial of the length ` `    ``long` `long` `int` `result = fact(total); ` ` `  `    ``// Divide by the factorials of ` `    ``// the no. of occurrences of all ` `    ``// the characters. ` `    ``for` `(``int` `i = 0; i < 26; i++) { ` `        ``if` `(has[i] > 1) { ` `            ``result = result / fact(has[i]); ` `        ``} ` `    ``} ` ` `  `    ``// return the result ` `    ``return` `result; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``string str = ``"MISSISSIPPI"``; ` ` `  `    ``// Assuming the string and the character ` `    ``// are all in uppercase ` `    ``cout << getResult(str, ``'S'``) << endl; ` ` `  `  ``return` `0; ` `} `

## Java

 `   `  `// Java implementation of above approach ` `import` `java.util.*; ` `class` `solution ` `{ ` ` `  `// Function to return factorial ` `// of the number passed as argument ` ` ``static` `int` `fact(``int` `n) ` `{ ` `     ``int` `result = ``1``; ` `    ``for` `(``int` `i = ``1``; i <= n; i++) ` `        ``result *= i; ` `    ``return` `result; ` `} ` ` `  `// Function to get the total permutations ` `// which satisfy the given condition ` `static` `int` `getResult(String str, ``char` `ch) ` `{ ` `    ``// Create has to store count ` `    ``// of each character ` `    ``int` `has[] = ``new` `int``[``26``]; ` `     `  `    ``for``(``int` `i=``0``;i<``26``;i++) ` `    ``has[i]=``0``; ` ` `  `    ``// Store character occurrences ` `    ``for` `(``int` `i = ``0``; i < str.length(); i++) ` `        ``has[str.charAt(i) - ``'A'``]++; ` ` `  `    ``// Count number of times ` `    ``// Particular character comes ` `    ``int` `particular = has[ch - ``'A'``]; ` ` `  `    ``// If particular character isn't ` `    ``// present in the string then return 0 ` `    ``if` `(particular == ``0``) ` `        ``return` `0``; ` ` `  `    ``// Remove count of particular character ` `    ``has[ch - ``'A'``] = ``0``; ` ` `  `    ``// Total length ` `    ``// of the string ` `    ``int` `total = str.length(); ` ` `  `    ``// Assume all occurrences of ` `    ``// particular character as a ` `    ``// single character. ` `    ``total = total - particular + ``1``; ` ` `  `    ``// Compute factorial of the length ` `     ``int` `result = fact(total); ` ` `  `    ``// Divide by the factorials of ` `    ``// the no. of occurrences of all ` `    ``// the characters. ` `    ``for` `(``int` `i = ``0``; i < ``26``; i++) { ` `        ``if` `(has[i] > ``1``) { ` `            ``result = result / fact(has[i]); ` `        ``} ` `    ``} ` ` `  `    ``// return the result ` `    ``return` `result; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``String str = ``"MISSISSIPPI"``; ` ` `  `    ``// Assuming the string and the character ` `    ``// are all in uppercase ` `    ``System.out.println( getResult(str, ``'S'``) ); ` ` `  `} ` `} ` `//contributed by Arnab Kundu `

## Python 3

 `# Python3 implementation of  ` `# the approach  ` ` `  `# Function to return factorial  ` `# of the number passed as argument  ` `def` `fact(n) : ` ` `  `    ``result ``=` `1` ` `  `    ``for` `i ``in` `range``(``1``, n ``+` `1``) : ` `        ``result ``*``=` `i ` ` `  `    ``return` `result ` ` `  `# Function to get the total permutations  ` `# which satisfy the given condition  ` `def` `getResult(string, ch): ` ` `  `    ``# Create has to store count  ` `    ``# of each character ` `    ``has ``=` `[``0``] ``*` `26` ` `  `    ``# Store character occurrences  ` `    ``for` `i ``in` `range``(``len``(string)) : ` `        ``has[``ord``(string[i]) ``-` `ord``(``'A'``)] ``+``=` `1` ` `  `    ``# Count number of times  ` `    ``# Particular character comes  ` `    ``particular ``=` `has[``ord``(ch) ``-` `ord``(``'A'``)] ` ` `  `    ``# If particular character isn't  ` `    ``# present in the string then return 0 ` `    ``if` `particular ``=``=` `0` `: ` `        ``return` `0` ` `  `    ``# Remove count of particular character  ` `    ``has[``ord``(ch) ``-` `ord``(``'A'``)] ``=` `0` ` `  `    ``# Total length  ` `    ``# of the string  ` `    ``total ``=` `len``(string) ` ` `  `    ``# Assume all occurrences of  ` `    ``# particular character as a  ` `    ``# single character.  ` `    ``total ``=` `total ``-` `particular ``+` `1` ` `  `    ``# Compute factorial of the length  ` `    ``result ``=` `fact(total) ` ` `  `    ``# Divide by the factorials of  ` `    ``# the no. of occurrences of all  ` `    ``# the characters.  ` `    ``for` `i ``in` `range``(``26``) : ` ` `  `        ``if` `has[i] > ``1` `: ` `            ``result ``/``=` `fact(has[i]) ` ` `  `    ``# return the result  ` `    ``return` `result ` ` `  ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``string ``=` `"MISSISSIPPI"` ` `  `    ``# Assuming the string and the character  ` `    ``# are all in uppercase  ` `    ``print``(getResult(string,``'S'``)) ` ` `  `# This code is contributed  ` `# by ANKITRAI1 `

## C#

 `// C# implementation of above approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to return factorial ` `// of the number passed as argument ` `static` `int` `fact(``int` `n) ` `{ ` `    ``int` `result = 1; ` `    ``for` `(``int` `i = 1; i <= n; i++) ` `        ``result *= i; ` `    ``return` `result; ` `} ` ` `  `// Function to get the total permutations ` `// which satisfy the given condition ` `static` `int` `getResult(``string` `str, ``char` `ch) ` `{ ` `    ``// Create has to store count ` `    ``// of each character ` `    ``int` `[]has = ``new` `int``; ` `     `  `    ``for``(``int` `i = 0; i < 26; i++) ` `    ``has[i] = 0; ` ` `  `    ``// Store character occurrences ` `    ``for` `(``int` `i = 0; i < str.Length; i++) ` `        ``has[str[i] - ``'A'``]++; ` ` `  `    ``// Count number of times ` `    ``// Particular character comes ` `    ``int` `particular = has[ch - ``'A'``]; ` ` `  `    ``// If particular character  ` `    ``// isn't present in the string  ` `    ``// then return 0 ` `    ``if` `(particular == 0) ` `        ``return` `0; ` ` `  `    ``// Remove count of particular character ` `    ``has[ch - ``'A'``] = 0; ` ` `  `    ``// Total length of the string ` `    ``int` `total = str.Length; ` ` `  `    ``// Assume all occurrences of ` `    ``// particular character as a ` `    ``// single character. ` `    ``total = total - particular + 1; ` ` `  `    ``// Compute factorial of the length ` `    ``int` `result = fact(total); ` ` `  `    ``// Divide by the factorials of ` `    ``// the no. of occurrences of all ` `    ``// the characters. ` `    ``for` `(``int` `i = 0; i < 26; i++)  ` `    ``{ ` `        ``if` `(has[i] > 1)  ` `        ``{ ` `            ``result = result / fact(has[i]); ` `        ``} ` `    ``} ` ` `  `    ``// return the result ` `    ``return` `result; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``string` `str = ``"MISSISSIPPI"``; ` ` `  `    ``// Assuming the string and the  ` `    ``// character are all in uppercase ` `    ``Console.WriteLine(getResult(str, ``'S'``) ); ` `} ` `} ` ` `  `// This code is contributed by anuj_67 `

## PHP

 ` 1) ` `        ``{ ` `            ``\$result` `= ``\$result` `/ fact(``\$has``[``\$i``]); ` `        ``} ` `    ``} ` ` `  `    ``// return the result ` `    ``return` `\$result``; ` `} ` ` `  `// Driver Code ` `\$str` `= ``"MISSISSIPPI"``; ` ` `  `// Assuming the string and the character ` `// are all in uppercase ` `echo` `getResult(``\$str``, ``'S'``).``"\n"` `; ` ` `  `// This code is contributed by ita_c ` `?> `

Output:

```840
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

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.