给定具有大写字符和整数K的字符串str ,任务是找到最长子序列的长度,以使前K个字母的频率相同。
例子:
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.
方法:
遍历字符串并查找前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现场课程美国》。