给定的整数k和由小写英文字母的字符串str,任务是计数多少K字符字(具有或不具有意义)可以从str的字符时,不允许重复形成。
例子:
Input: str = “cat”, k = 3
Output: 6
Required words are “cat”, “cta”, “act”, “atc”, “tca” and “tac”.
Input: str = “geeksforgeeks”, k = 3
Output: 840
方法:计算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