Find the length of the longest subsequence with first K alphabets having same frequency
Last Updated :
28 May, 2021
Given string str with uppercase characters and an integer K, the task is to find the length of the longest subsequence such that the frequency of the first K alphabet is the same.
Examples:
Input: str = “ACAABCCAB”, K=3
Output: 6
Explanation: One of the possible subsequences is “ACABCB”.
Input: str = “ACAABCCAB”, K=4
Output: 0
Explanation: Since the string does not contain ‘D’, no such subsequence can be obtained.
Approach:
Traverse the string and find the least frequent of the first K alphabets. Once found, (frequency of that element) * K gives the desired result.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int lengthOfSubsequence(string str,
int K)
{
map< char , int > mp;
for ( char ch : str) {
mp[ch]++;
}
int minimum = mp[ 'A' ];
for ( int i = 1; i < K; i++) {
minimum = min(minimum,
mp[( char )(i + 'A' )]);
}
return minimum * K;
}
int main()
{
string str = "ACAABCCAB" ;
int K = 3;
cout << lengthOfSubsequence(str, K);
return 0;
}
|
Java
import java.util.*;
class GFG{
static int lengthOfSubsequence(String str,
int K)
{
Map<Character, Integer> mp = new HashMap<>();
for ( char ch : str.toCharArray())
{
mp.put(ch, mp.getOrDefault(ch, 0 ) + 1 );
}
int minimum = mp.get( 'A' );
for ( int i = 1 ; i < K; i++)
{
minimum = Math.min(minimum,
mp.get(( char )(i + 'A' )));
}
return minimum * K;
}
public static void main(String[] args)
{
String str = "ACAABCCAB" ;
int K = 3 ;
System.out.println(lengthOfSubsequence(str, K));
}
}
|
Python3
from collections import defaultdict
def lengthOfSubsequence(st, K):
mp = defaultdict( int )
for ch in st:
mp[ch] + = 1
minimum = mp[ 'A' ]
for i in range ( 1 , K):
minimum = min (minimum,
mp[ chr (i + ord ( 'A' ))])
return (minimum * K)
if __name__ = = "__main__" :
st = "ACAABCCAB"
K = 3
print (lengthOfSubsequence(st, K))
|
C#
using System;
using System.Collections.Generic;
class GFG{
static int lengthOfSubsequence( string str,
int K)
{
Dictionary< char ,
int > mp = new Dictionary< char ,
int >();
foreach ( char ch in str.ToCharArray())
{
mp[ch] = mp.GetValueOrDefault(ch, 0) + 1;
}
int minimum = mp[ 'A' ];
for ( int i = 1; i < K; i++)
{
minimum = Math.Min(minimum,
mp[( char )(i + 'A' )]);
}
return minimum * K;
}
public static void Main( string [] args)
{
string str = "ACAABCCAB" ;
int K = 3;
Console.Write(lengthOfSubsequence(str, K));
}
}
|
Javascript
<script>
function lengthOfSubsequence(str, K)
{
var mp = new Map();
str.split( '' ).forEach(ch => {
if (mp.has(ch))
mp.set(ch, mp.get(ch)+1)
else
mp.set(ch, 1)
});
var minimum = mp.get( 'A' );
for ( var i = 1; i < K; i++) {
minimum = Math.min(minimum,
mp.get(String.fromCharCode(i + 'A' .charCodeAt(0))));
}
return minimum * K;
}
var str = "ACAABCCAB" ;
var K = 3;
document.write( lengthOfSubsequence(str, K));
</script>
|
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...