Number of ways to arrange n distinct items are = n!.

If we have duplicate items, say one item repeated m1 times, then we need to divide n! by m1!. Since these items can be arranged in m1! ways but that will not produce any different results.

For example let’s say we have 6 items {a, b, a, c, d, c}, we have ‘a’ which is occurring twice. So in one of the permutation – ‘aabccd’ . if we replace ‘a’ at 0^{th} index and ‘a’ at 1^{st} index, it will not produce any different result. ‘aa’ can be arranged in !2 ways. Same with ‘c’ So our final result will be 6!/(2!*2!).

Let’s drive a generic formula –

Implementation:

Count all the characters in the given string, say its N.

Calculate N!, this might be our final result if none of the characters are repeated.

Count the occurrences of all the characters, store it. We are using Hash Map in our implementation below.

Find the factorial of all the counts and divide the result by these factorials. (Non repeated characters will have count 1 and 1! = 1 so dividing by 1 will not affect our final result.)

Code:

Output:

Number of distinct permutations of String: 'abc' are: 6
Number of distinct permutations of String: 'aabc' are: 12
Number of distinct permutations of String: 'aabccd' are: 180

If you find anything incorrect or you feel that there is any better approach to solve the above problem, please write comment.
__________________________________________________