# K length words that can be formed from given characters without repetition

Given an integer k and a string str consisting of lowercase English alphabets, the task is to count how many k character words (with or without meaning) can be formed from the characters of str when repetition is not allowed.

Examples:

Input: str = “cat”, k = 3
Output: 6
Required words are “cat”, “cta”, “act”, “atc”, “tca” and “tac”.

Input: str = “geeksforgeeks”, k = 3
Output: 840

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

Approach: Count the number of distinct characters in str and store it in cnt, now the task is to arrange k characters out of cnt characters i.e. nPr = n! / (n – r)!.

Below is the implementation of the above approach:

## C++

 // C++ implementation of the approach #include using namespace std;    // Function to return the required count int findPermutation(string str, int k) {     bool has[26] = { false };        // To store the count of distinct characters in str     int cnt = 0;        // Traverse str character by character     for (int i = 0; i < str.length(); i++) {            // If current character is appearing         // for the first time in str         if (!has[str[i] - 'a']) {                // Increment the distinct character count             cnt++;                // Update the appearance of the current character             has[str[i] - 'a'] = true;         }     }        long long int ans = 1;        // Since P(n, r) = n! / (n - r)!     for (int i = 2; i <= cnt; i++)         ans *= i;        for (int i = cnt - k; i > 1; i--)         ans /= i;        // Return the answer     return ans; }    // Driver code int main() {     string str = "geeksforgeeks";     int k = 4;     cout << findPermutation(str, k);        return 0; }

## Java

 // Java implementation of the approach import java.util.*;    class solution { // Function to return the required count static int findPermutation(String str, int k) {     boolean[] has = new boolean[26];     Arrays.fill(has,false);        // To store the count of distinct characters in str     int cnt = 0;        // Traverse str character by character     for (int i = 0; i < str.length(); i++) {            // If current character is appearing         // for the first time in str         if (!has[str.charAt(i) - 'a'])          {                // Increment the distinct character count             cnt++;                // Update the appearance of the current character             has[str.charAt(i) - 'a'] = true;         }     }        int ans = 1;        // Since P(n, r) = n! / (n - r)!     for (int i = 2; i <= cnt; i++)         ans *= i;        for (int i = cnt - k; i > 1; i--)         ans /= i;        // Return the answer     return ans; }    // Driver code public static void main(String args[]) {     String str = "geeksforgeeks";     int k = 4;     System.out.println(findPermutation(str, k));    } } // This code is contributed by // Sanjit_prasad

## Python3

 # Python3 implementation of the approach import math as mt     # Function to return the required count def findPermutation(string, k):        has = [False for i in range(26)]        # To store the count of distinct      # characters in str     cnt = 0        # Traverse str character by character     for i in range(len(string)):                    # If current character is appearing         # for the first time in str         if (has[ord(string[i]) - ord('a')] == False):                # Increment the distinct             # character count             cnt += 1                # Update the appearance of the              # current character             has[ord(string[i]) - ord('a')] = True                ans = 1        # Since P(n, r) = n! / (n - r)!     for i in range(2, cnt + 1):         ans *= i        for i in range(cnt - k, 1, -1):         ans //= i        # Return the answer     return ans    # Driver code string = "geeksforgeeks" k = 4 print(findPermutation(string, k))    # This code is contributed  # by Mohit kumar 29

## C#

 // C# implementation of the approach     using System;    class solution  {  // Function to return the required count  static int findPermutation(string str, int k)  {      bool []has = new bool[26];             for (int i = 0; i < 26 ; i++)          has[i] = false;        // To store the count of distinct characters in str      int cnt = 0;         // Traverse str character by character      for (int i = 0; i < str.Length; i++) {             // If current character is appearing          // for the first time in str          if (!has[str[i] - 'a'])          {                 // Increment the distinct character count              cnt++;                 // Update the appearance of the current character              has[str[i] - 'a'] = true;          }      }         int ans = 1;         // Since P(n, r) = n! / (n - r)!      for (int i = 2; i <= cnt; i++)          ans *= i;         for (int i = cnt - k; i > 1; i--)          ans /= i;         // Return the answer      return ans;  }     // Driver code  public static void Main()  {      string str = "geeksforgeeks";      int k = 4;      Console.WriteLine(findPermutation(str, k));     }  // This code is contributed by Ryuga }

Output:

840

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.