Related Articles

Related Articles

Find the length of the longest subsequence with first K alphabets having same frequency
  • Last Updated : 25 Aug, 2020

Given a 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 first K alphabets is 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the longest 
// subsequence with first K 
// alphabets having same frequency 
  
#include <bits/stdc++.h> 
using namespace std; 
  
// Function to return the 
// length of the longest 
// subsequence with first K 
// alphabets having same frequency 
int lengthOfSubsequence(string str, 
                            int K) 
    // Map to store frequency 
    // of all characters in 
    // the string 
    map<char,int> mp; 
    for (char ch : str) { 
        mp[ch]++; 
    
      
    // Variable to store the 
    // frequency of the least 
    // frequent of first K 
    // alphabets 
    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; 

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the longest 
// subsequence with first K alphabets 
// having same frequency 
import java.util.*; 
  
class GFG{ 
  
// Function to return the 
// length of the longest 
// subsequence with first K 
// alphabets having same frequency 
static int lengthOfSubsequence(String str, 
                            int K) 
      
    // Map to store frequency 
    // of all characters in 
    // the string 
    Map<Character, Integer> mp = new HashMap<>(); 
    for(char ch : str.toCharArray()) 
    
        mp.put(ch, mp.getOrDefault(ch, 0) + 1); 
    
  
    // Variable to store the 
    // frequency of the least 
    // frequent of first K 
    // alphabets 
    int minimum = mp.get('A'); 
    for(int i = 1; i < K; i++) 
    
        minimum = Math.min(minimum, 
                        mp.get((char)(i + 'A'))); 
    
    return minimum * K; 
  
// Driver code 
public static void main(String[] args) 
    String str = "ACAABCCAB"
    int K = 3
      
    System.out.println(lengthOfSubsequence(str, K)); 
  
// This code is contributed by offbeat 

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the longest 
# subsequence with first K alphabets 
# having same frequency 
from collections import defaultdict 
  
# Function to return the 
# length of the longest 
# subsequence with first K 
# alphabets having same frequency 
def lengthOfSubsequence(st, K): 
  
    # Map to store frequency 
    # of all characters in 
    # the string 
    mp = defaultdict(int
    for ch in st: 
        mp[ch] += 1
      
    # Variable to store the 
    # frequency of the least 
    # frequent of first K 
    # alphabets 
    minimum = mp['A'
      
    for i in range(1, K): 
        minimum = min(minimum, 
                    mp[chr(i + ord('A'))]) 
      
    return (minimum * K) 
  
# Driver code 
if __name__ == "__main__"
      
    st = "ACAABCCAB"
    K = 3
      
    print(lengthOfSubsequence(st, K)) 
  
# This code is contributed by chitranayal 

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the longest
// subsequence with first K alphabets
// having same frequency
using System;
using System.Collections.Generic;
  
class GFG{
  
// Function to return the
// length of the longest
// subsequence with first K
// alphabets having same frequency
static int lengthOfSubsequence(string str,
                               int K)
{
      
    // Store frequency
    // of all characters in
    // the string
    Dictionary<char,
               int> mp = new Dictionary<char,
                                        int>();
      
    foreach(char ch in str.ToCharArray())
    {
        mp[ch] = mp.GetValueOrDefault(ch, 0) + 1;
    }
  
    // Variable to store the frequency
    // of the least frequent of first K
    // alphabets
    int minimum = mp['A'];
    for(int i = 1; i < K; i++) 
    {
        minimum = Math.Min(minimum, 
                           mp[(char)(i + 'A')]);
    }
    return minimum * K;
}
  
// Driver code
public static void Main(string[] args)
{
    string str = "ACAABCCAB";
    int K = 3;
      
    Console.Write(lengthOfSubsequence(str, K));
}
}
  
// This code is contributed by rutvik_56

chevron_right


Output:

6

competitive-programming-img




My Personal Notes arrow_drop_up
Recommended Articles
Page :