# Remove characters that appear more than k times

• Last Updated : 07 Sep, 2022

Given a string of lowercase letters, reduce it by removing the characters which appear more than k times in the string.

Examples:

```Input : str = "geeksforgeeks"
k = 2
Output : for

Input : str = "geeksforgeeks"
k = 3
Output : gksforgks```

Approach :

• Create a hash table of 26 indexes, where the 0th index represents ‘a’ and 1th index represents ‘b’ and so on. Initialize the hash table to zero.
• Iterate through the string and count increment the frequency of the str[i] character in the hash table.
• Now once again traverse through the string and append those characters in the new string whose frequency in the hash table is less than k and skip those which appear more than equal to k.

Time Complexity: O(N)

Below is the implementation of above approach:

## C++

 `// C++ program to reduce the string by``// removing the characters which``// appears more than k times``#include ``using` `namespace` `std;` `const` `int` `MAX_CHAR = 26;` `void` `removeChars(``char` `arr[], ``int` `k)``{``    ``// Hash table initialised to 0``    ``int` `hash[MAX_CHAR] = { 0 };` `    ``// Increment the frequency of the character``    ``int` `n = ``strlen``(arr);``    ``for` `(``int` `i = 0; i < n; ++i)``        ``hash[arr[i] - ``'a'``]++;   ` `    ``// Next index in reduced string``    ``int` `index = 0;``    ``for` `(``int` `i = 0; i < n; ++i) {` `        ``// Append the characters which``        ``// appears less than k times``        ``if` `(hash[arr[i] - ``'a'``] < k) {``           ``arr[index++] = arr[i];``        ``}``    ``}` `    ``arr[index] = ``'\0'``;``}` `int` `main()``{``    ``char` `str[] = ``"geeksforgeeks"``;``    ``int` `k = 2;``    ``removeChars(str, k);``    ``cout << str;``    ``return` `0;``}`

## Java

 `// Java program to reduce the string by``// removing the characters which``// appears more than k times``import` `java.util.*;``class` `Solution``{`` ` `static` `final` `int` `MAX_CHAR = ``26``;`` ` `static` `void` `removeChars(``char` `arr[], ``int` `k)``{``    ``// Hash table initialised to 0``    ``int` `hash[]=``new` `int``[MAX_CHAR];``    ` `    ``for` `(``int` `i = ``0``; i

## Python3

 `# Python 3 program to reduce the string by``# removing the characters which``# appears more than k times``MAX_CHAR ``=` `26` `def` `removeChars(arr, k):``    ` `    ``# Hash table initialised to 0``    ``hash` `=` `[``0` `for` `i ``in` `range``(MAX_CHAR)]` `    ``# Increment the frequency of the character``    ``n ``=` `len``(arr)``    ``for` `i ``in` `range``(n):``        ``hash``[``ord``(arr[i]) ``-` `ord``(``'a'``)] ``+``=` `1` `    ``# Next index in reduced string``    ``index ``=` `0``    ``for` `i ``in` `range``(n):``        ` `        ``# Append the characters which``        ``# appears less than k times``        ``if` `(``hash``[``ord``(arr[i]) ``-` `ord``(``'a'``)] < k):``            ``arr[index] ``=` `arr[i]``            ``index ``+``=` `1``        ` `    ``arr[index] ``=` `' '``    ` `    ``for` `i ``in` `range``(index):``        ``print``(arr[i], end ``=` `'')` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``str` `=` `"geeksforgeeks"``    ``str` `=` `list``(``str``)``    ``k ``=` `2``    ``removeChars(``str``, k)` `# This code is contributed by``# Shashank_Sharma`

## C#

 `// C# program to reduce the string by``// removing the characters which``// appears more than k times``using` `System;``public` `class` `Solution{` `    ``static` `readonly` `int` `MAX_CHAR = 26;` `    ``static` `void` `removeChars(``char` `[]arr, ``int` `k)``    ``{``        ``// Hash table initialised to 0``        ``int` `[]hash=``new` `int``[MAX_CHAR];` `        ``for` `(``int` `i = 0; i

## PHP

 ``

## Javascript

 ``

Output

`for`

Complexity Analysis:

• Time Complexity: O(n), where n represents the size of the given array.
• Auxiliary Space: O(26), no extra space is required, so it is a constant.

#### Method #2:Using Built-in Python functions:

• We will scan the string and count the occurrence of all characters using built-in Counter() function.
• Now once again traverse through the string and append those characters in the new string whose frequency in the frequency dictionary is less than k and skip those which appear more than equal to k.

Note: This method is applicable for all types of characters.

## Python3

 `# Python 3 program to reduce the string``# by removing the characters which``# appears more than k times``from` `collections ``import` `Counter` `# Function to reduce the string by``# removing the characters which``# appears more than k times``def` `removeChars(``str``, k):``  ` `    ``# Using Counter function to``    ``# count frequencies``    ``freq ``=` `Counter(``str``)``    ` `    ``# create a new empty string``    ``res ``=` `""` `    ``for` `i ``in` `range``(``len``(``str``)):` `        ``# Append the characters which``        ``# appears less than equal to k times``        ``if` `(freq[``str``[i]] < k):``            ``res ``+``=` `str``[i]` `    ``return` `res`  `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``str` `=` `"geeksforgeeks"``    ``k ``=` `2` `    ``print``(removeChars(``str``, k))` `# This code is contributed by vikkycirus`

Output

```for
```

Complexity Analysis:

• Time Complexity: O(n), where n represents the size of the given array.
• Auxiliary Space: O(26), no extra space is required, so it is a constant.

My Personal Notes arrow_drop_up