# Longest subsequence where every character appears at-least k times

• Difficulty Level : Basic
• Last Updated : 30 Jul, 2021
` `

Given a string and a number k, find the longest subsequence of a string where every character appears at-least k times.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```Input : str = "geeksforgeeks"
k = 2
Output : geeksgeeks
Every character in the output
subsequence appears at-least 2
times.

Input : str = "aabbaabacabb"
k = 5
Output : aabbaabaabb```

Method 1 (Brute force)
We generate all subsequences. For every subsequence count distinct characters in it and find the longest subsequence where every character appears at-least k times.

Method 2 (Efficient way)
1. Find the frequency of the string and store it in an integer array of size 26 representing the alphabets.
2. After finding the frequency iterate the string character by character and if the frequency of that character is greater than or equal to the required number of repetitions then print that character then and there only.

## C++

 `// C++ program to Find longest subsequence where` `//  every character appears at-least k times` `#include` `using` `namespace` `std;`   `const` `int` `MAX_CHARS = 26;`   `void` `longestSubseqWithK(string str, ``int` `k)    ` `{` `    ``int` `n = str.size();                   `   `    ``// Count frequencies of all characters` `    ``int` `freq[MAX_CHARS] = {0};                    ` `    ``for` `(``int` `i = 0 ; i < n; i++)    ` `        ``freq[str[i] - ``'a'``]++;              ` `    `  `    ``// Traverse given string again and print` `    ``// all those characters whose frequency` `    ``// is more than or equal to k.` `    ``for` `(``int` `i = 0 ; i < n ; i++)   ` `        ``if` `(freq[str[i] - ``'a'``] >= k)               ` `            ``cout << str[i];      ` `}`   `// Driver code` `int` `main() {` `    ``string str = ``"geeksforgeeks"``;` `    ``int` `k = 2;` `    ``longestSubseqWithK(str, k);       ` `    ``return` `0;` `}`

## Java

 `// Java program to Find longest subsequence where` `//  every character appears at-least k times`   `class` `GFG {`   `    ``static` `final` `int` `MAX_CHARS = ``26``;`   `    ``static` `void` `longestSubseqWithK(String str, ``int` `k) {` `        ``int` `n = str.length();`   `        ``// Count frequencies of all characters` `        ``int` `freq[] = ``new` `int``[MAX_CHARS];` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``freq[str.charAt(i) - ``'a'``]++;` `        ``}`   `        ``// Traverse given string again and print` `        ``// all those characters whose frequency` `        ``// is more than or equal to k.` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``if` `(freq[str.charAt(i) - ``'a'``] >= k) {` `                ``System.out.print(str.charAt(i));` `            ``}` `        ``}` `    ``}`   `// Driver code` `    ``static` `public` `void` `main(String[] args) {` `        ``String str = ``"geeksforgeeks"``;` `        ``int` `k = ``2``;` `        ``longestSubseqWithK(str, k);`   `    ``}` `}`   `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program to Find longest subsequence where` `#  every character appears at-least k times` ` `  `MAX_CHARS ``=` `26` ` `  `def` `longestSubseqWithK(``str``, k):    `   `    ``n ``=` `len``(``str``)                  ` ` `  `    ``# Count frequencies of all characters` `    ``freq ``=` `[``0``]``*``MAX_CHARS                 ` `    ``for` `i ``in` `range``(n):  ` `        ``freq[``ord``(``str``[i]) ``-` `ord``(``'a'``)]``+``=``1`              `     `  `    ``# Traverse given string again and print` `    ``# all those characters whose frequency` `    ``# is more than or equal to k.` `    ``for` `i ``in` `range``(n ):` `        ``if` `(freq[``ord``(``str``[i]) ``-` `ord``(``'a'``)] >``=` `k):               ` `            ``print``(``str``[i],end``=``"")` ` `  `# Driver code` `if` `__name__ ``=``=` `"__main__"``:` `    `  `    ``str` `=` `"geeksforgeeks"` `    ``k ``=` `2` `    ``longestSubseqWithK(``str``, k)`

## C#

 `    `  `// C# program to Find longest subsequence where` `//  every character appears at-least k times` `using` `System; ` `public` `class` `GFG {` ` `  `    ``static` `readonly` `int` `MAX_CHARS = 26;` ` `  `    ``static` `void` `longestSubseqWithK(String str, ``int` `k) {` `        ``int` `n = str.Length;` ` `  `        ``// Count frequencies of all characters` `        ``int` `[]freq = ``new` `int``[MAX_CHARS];` `        ``for` `(``int` `i = 0; i < n; i++) {` `            ``freq[str[i]- ``'a'``]++;` `        ``}` ` `  `        ``// Traverse given string again and print` `        ``// all those characters whose frequency` `        ``// is more than or equal to k.` `        ``for` `(``int` `i = 0; i < n; i++) {` `            ``if` `(freq[str[i] - ``'a'``] >= k) {` `                ``Console.Write(str[i]);` `            ``}` `        ``}` `    ``}` ` `  `// Driver code` `    ``static` `public` `void` `Main() {` `        ``String str = ``"geeksforgeeks"``;` `        ``int` `k = 2;` `        ``longestSubseqWithK(str, k);` ` `  `    ``}` `}` ` `  `// This code is contributed by Rajput-Ji`

## Javascript

 ``

Output

`geeksgeeks`

This code has a time complexity of O(n) where n is the size of the string.

Method 3 (Efficient way – Using HashMap)

## Java

 `/*package whatever //do not write package name here */` `// Java program to Find longest subsequence where every` `// character appears at-least k times`   `import` `java.io.*;` `import` `java.util.HashMap;`   `class` `GFG {`   `    ``static` `void` `longestSubseqWithK(String str, ``int` `k)` `    ``{` `        ``int` `n = str.length();` `        ``HashMap hm = ``new` `HashMap<>();`   `        ``// Count frequencies of all characters` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``char` `c = str.charAt(i);` `            ``if` `(hm.containsKey(c))` `                ``hm.put(c, hm.get(c) + ``1``);` `            ``else` `                ``hm.put(c, ``1``);` `        ``}`   `        ``// Traverse given string again and print` `        ``// all those characters whose frequency` `        ``// is more than or equal to k.` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``char` `c = str.charAt(i);` `            ``if` `(hm.get(c) >= k) {` `                ``System.out.print(c);` `            ``}` `        ``}` `    ``}`   `    ``// Driver code` `    ``static` `public` `void` `main(String[] args)` `    ``{` `        ``String str = ``"geeksforgeeks"``;` `        ``int` `k = ``2``;` `        ``longestSubseqWithK(str, k);` `    ``}` `}`   `// This code is contributed by Chandan-Bedi`

Output

`geeksgeeks`

Time complexity: O(n) where n is the size of the string.

This article is contributed by Mohak Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.