📌  相关文章
📜  K个长度可以由给定字符组成的单词,无需重复

📅  最后修改于: 2021-04-25 00:58:20             🧑  作者: Mango

给定的整数k和由小写英文字母的字符串str,任务是计数多少K字符字(具有或不具有意义)可以从str的字符时,不允许重复形成。

例子:

方法:计算str中不同字符的数量并将其存储在cnt中,现在的任务是从cnt字符排列出k个字符,即n P r = n! /(n – r)!

下面是上述方法的实现:

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
}


PHP
 1; $i--)
        $ans /= $i;
  
    // Return the answer
    return $ans;
}
  
// Driver code
$str = "geeksforgeeks";
$k = 4;
echo findPermutation($str, $k);
  
  
// This code is contributed by ihritik
?>


输出:
840