📌  相关文章
📜  找出频率相同的前K个字母的最长子序列的长度

📅  最后修改于: 2021-06-27 00:25:37             🧑  作者: Mango

给定具有大写字符和整数K的字符串str ,任务是找到最长子序列的长度,以使前K个字母的频率相同。

例子:

方法:
遍历字符串并查找前K个字母中频率最低的那个。一旦找到, (该元素的频率)* K即可得到所需的结果。

下面是上述方法的实现:

C++
// C++ program to find the longest 
// subsequence with first K 
// alphabets having same frequency 
  
#include  
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 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; 
}


Java
// 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 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


Python3
# 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


C#
// 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 mp = new Dictionary();
      
    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


输出:
6

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。