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

📅  最后修改于: 2021-06-25 17:43:50             🧑  作者: 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
?>


Javascript


输出:
840