Find the number of strings formed using distinct characters of a given string
Last Updated :
03 May, 2023
Given a string str consisting of lowercase English alphabets, the task is to find the count of all possible string of maximum length that can be formed using the characters of str such that no two characters in the generated string are same.
Examples:
Input: str = “aba”
Output: 2
“ab” and “ba” are the only valid strings.
Input: str = “geeksforgeeks”
Output: 5040
Approach: First, count the number of distinct characters in the string say cnt as no two characters can be same in the resultant string. Now, the total number of strings that can be formed with cnt number of characters is cnt! as every character of str has to be present in the generated string in order to maximise the length and no character should appear more than once.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int fact( int n)
{
int fact = 1;
for ( int i = 1; i <= n; i++)
fact *= i;
return fact;
}
int countStrings(string str, int n)
{
set< char > distinct_char;
for ( int i = 0; i < n; i++) {
distinct_char.insert(str[i]);
}
return fact(distinct_char.size());
}
int main()
{
string str = "geeksforgeeks" ;
int n = str.length();
cout << countStrings(str, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int fact( int n)
{
int fact = 1 ;
for ( int i = 1 ; i <= n; i++)
fact *= i;
return fact;
}
static int countStrings(String str, int n)
{
Set<Character> distinct_char = new HashSet<>();
for ( int i = 0 ; i < n; i++)
{
distinct_char.add(str.charAt(i));
}
return fact(distinct_char.size());
}
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
int n = str.length();
System.out.println(countStrings(str, n));
}
}
|
Python3
def fact(n) :
fact = 1 ;
for i in range ( 1 , n + 1 ) :
fact * = i;
return fact;
def countStrings(string, n) :
distinct_char = set ();
for i in range (n) :
distinct_char.add(string[i]);
return fact( len (distinct_char));
if __name__ = = "__main__" :
string = "geeksforgeeks" ;
n = len (string);
print (countStrings(string, n));
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static int fact( int n)
{
int fact = 1;
for ( int i = 1; i <= n; i++)
fact *= i;
return fact;
}
static int countStrings(String str, int n)
{
HashSet< char > distinct_char = new HashSet< char >();
for ( int i = 0; i < n; i++)
{
distinct_char.Add(str[i]);
}
return fact(distinct_char.Count);
}
public static void Main(String[] args)
{
String str = "geeksforgeeks" ;
int n = str.Length;
Console.WriteLine(countStrings(str, n));
}
}
|
Javascript
<script>
function fact(n)
{
let fact = 1;
for (let i = 1; i <= n; i++)
fact *= i;
return fact;
}
function countStrings(str, n)
{
let distinct_char = new Set();
for (let i = 0; i < n; i++) {
distinct_char.add(str[i]);
}
return fact(distinct_char.size);
}
let str = "geeksforgeeks" ;
let n = str.length;
document.write(countStrings(str, n));
</script>
|
Time Complexity: O(N^2), because it contains a loop with N iterations
Auxiliary Space: O(M), where M is the number of distinct characters in the input string.
Share your thoughts in the comments
Please Login to comment...