Remove characters that appear more than k times

Given a string of lowercase letters, reduce it by removing the characters which appears 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 0th index represent ‘a’ and 1th index represent ‘b’ and so on. Initialise the hash table to zero.
  • Iterate through the string and count increment the frequency 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 appears more than equal to k.

Time Complexity – O(N)

Below is the implementation of above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to reduce the string by
// removing the characters which
// appears more than k times
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 <MAX_CHAR; ++i)
    hash[i]=0;
   
    // Increment the frequency of the character
    int n = (arr).length;
    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];
        }
    }
    for (int i = index; i < n; ++i)
    arr[i] = ' ';
}
   
public static void main(String args[])
{
    char str[] = "geeksforgeeks".toCharArray();;
    int k = 2;
    removeChars(str, k);
    System.out.println(String.valueOf( str));
}
  
}
//contributed by Arnab Kundu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 <MAX_CHAR; ++i) 
        hash[i]=0; 
  
        // Increment the frequency of the character 
        int n = (arr).Length; 
        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]; 
            
        
        for (int i = index; i < n; ++i) 
        arr[i] = ' '
    
  
    public static void Main() 
    
        char []str = "geeksforgeeks".ToCharArray();; 
        int k = 2; 
        removeChars(str, k); 
        Console.Write(String.Join("",str)); 
    
  
// This code is contributed by PrinciRaj1992

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP program to reduce the string by
// removing the characters which
// appears more than k times
$MAX_CHAR = 26;
  
function removeChars($arr, $k)
{
    global $MAX_CHAR;
      
    // Hash table initialised to 0
    $hash = array_fill(0, $MAX_CHAR, NULL);
  
    // Increment the frequency of 
    // the character
    $n = strlen($arr);
    for ($i = 0; $i < $n; ++$i
        $hash[ord($arr[$i]) - ord('a')]++; 
  
    // Next index in reduced string
    $index = 0;
    for ($i = 0; $i < $n; ++$i)
    {
  
        // Append the characters which
        // appears less than k times
        if ($hash[ord($arr[$i]) - ord('a')] < $k)
        {
            $arr[$index++] = $arr[$i];
        }
    }
      
    $arr[$index] = '';
    for($i = 0; $i < $index; $i++)
        echo $arr[$i];
}
  
// Driver Code
$str = "geeksforgeeks";
$k = 2;
removeChars($str, $k);
  
// This code is contributed by ita_c
?>

chevron_right


Output:

for


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.