Remove characters from string that appears strictly less than K times
Last Updated :
27 Mar, 2023
Given a string of lowercase letters and a number K. The task is to reduce it by removing the characters which appear strictly less than K times in the string.
Examples:
Input : str = "geeksforgeeks", K = 2
Output : geeksgeeks
Input : str = "geeksforgeeks", K = 3
Output : eeee
Approach :
- Create a hash table of 26 indexes, where 0th index representing ‘a’ and 1th index represent ‘b’ and so on to store the frequency of each of the characters in the input string. Initialize this hash table to zero.
- Iterate through the string and increment the frequency of each character in the hash table. That is, hash[str[i]-‘a’]++.
- Now create a new empty string and once again traverse through the input string and append-only those characters in the new string whose frequency in the hash table is more than or equal to k and skip those which appear less than k times.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
string removeChars(string str, int k)
{
int hash[MAX_CHAR] = { 0 };
int n = str.length();
for ( int i = 0; i < n; ++i)
hash[str[i] - 'a' ]++;
string res = "" ;
for ( int i = 0; i < n; ++i) {
if (hash[str[i] - 'a' ] >= k) {
res += str[i];
}
}
return res;
}
int main()
{
string str = "geeksforgeeks" ;
int k = 2;
cout << removeChars(str, k);
return 0;
}
|
Java
class GFG {
final static int MAX_CHAR = 26 ;
static String removeChars(String str, int k) {
int hash[] = new int [MAX_CHAR];
int n = str.length();
for ( int i = 0 ; i < n; ++i) {
hash[str.charAt(i) - 'a' ]++;
}
String res = "" ;
for ( int i = 0 ; i < n; ++i) {
if (hash[str.charAt(i) - 'a' ] >= k) {
res += str.charAt(i);
}
}
return res;
}
static public void main(String[] args) {
String str = "geeksforgeeks" ;
int k = 2 ;
System.out.println(removeChars(str, k));
}
}
|
Python 3
MAX_CHAR = 26
def removeChars( str , k):
hash = [ 0 ] * (MAX_CHAR)
n = len ( str )
for i in range (n):
hash [ ord ( str [i]) - ord ( 'a' )] + = 1
res = ""
for i in range (n):
if ( hash [ ord ( str [i]) - ord ( 'a' )] > = k) :
res + = str [i]
return res
if __name__ = = "__main__" :
str = "geeksforgeeks"
k = 2
print (removeChars( str , k))
|
C#
using System;
class GFG
{
readonly static int MAX_CHAR = 26;
static String removeChars(String str, int k)
{
int []hash = new int [MAX_CHAR];
int n = str.Length;
for ( int i = 0; i < n; ++i)
{
hash[str[i] - 'a' ]++;
}
String res = "" ;
for ( int i = 0; i < n; ++i)
{
if (hash[str[i] - 'a' ] >= k)
{
res += str[i];
}
}
return res;
}
static public void Main()
{
String str = "geeksforgeeks" ;
int k = 2;
Console.WriteLine(removeChars(str, k));
}
}
|
Javascript
<script>
let MAX_CHAR = 26;
function removeChars(str,k)
{
let hash = new Array(MAX_CHAR);
for (let i=0;i<MAX_CHAR;i++)
hash[i]=0;
let n = str.length;
for (let i = 0; i < n; ++i) {
hash[str[i].charCodeAt(0) - 'a' .charCodeAt(0)]++;
}
let res = "" ;
for (let i = 0; i < n; ++i) {
if (hash[str[i].charCodeAt(0) - 'a' .charCodeAt(0)] >= k) {
res += str[i];
}
}
return res;
}
let str = "geeksforgeeks" ;
let k = 2;
document.write(removeChars(str, k));
</script>
|
Time Complexity: O(N), where N is the length of the given string.
Auxiliary Space: O(1), 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 create a new empty string and once again traverse through the input string and append only those characters in the new string whose frequency dictionary value is more than or equal to k and skip those which appear less than k times.
Note: This method is applicable to all types of characters.
Below is the implementation of the above approach:
C++
#include <iostream>
#include <unordered_map>
using namespace std;
string removeChars(string str, int k) {
unordered_map< char , int > freq;
for ( int i = 0; i < str.length(); i++) {
char c = str[i];
freq++;
}
string res = "" ;
for ( int i = 0; i < str.length(); i++) {
if (freq[str[i]] >= k) {
res += str[i];
}
}
return res;
}
int main() {
string str = "geeksforgeeks" ;
int k = 2;
cout << removeChars(str, k) << endl;
return 0;
}
|
Java
import java.util.HashMap;
class Main {
public static String removeChars(String str, int k)
{
HashMap<Character, Integer> freq
= new HashMap<Character, Integer>();
for ( int i = 0 ; i < str.length(); i++) {
char c = str.charAt(i);
freq.put(c, freq.getOrDefault(c, 0 ) + 1 );
}
StringBuilder res = new StringBuilder();
for ( int i = 0 ; i < str.length(); i++) {
if (freq.get(str.charAt(i)) >= k) {
res.append(str.charAt(i));
}
}
return res.toString();
}
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
int k = 2 ;
System.out.println(removeChars(str, k));
}
}
|
Python3
from collections import Counter
def removeChars( str , k):
freq = Counter( str )
res = ""
for i in range ( len ( str )):
if (freq[ str [i]] > = k):
res + = str [i]
return res
if __name__ = = "__main__" :
str = "geeksforgeeks"
k = 2
print (removeChars( str , k))
|
C#
using System;
using System.Collections.Generic;
class Program {
static string RemoveChars( string str, int k)
{
Dictionary< char , int > freq
= new Dictionary< char , int >();
for ( int i = 0; i < str.Length; i++) {
char c = str[i];
if (freq.ContainsKey(c)) {
freq++;
}
else {
freq = 1;
}
}
string res = "" ;
for ( int i = 0; i < str.Length; i++) {
if (freq[str[i]] >= k) {
res += str[i];
}
}
return res;
}
static void Main( string [] args)
{
string str = "geeksforgeeks" ;
int k = 2;
Console.WriteLine(RemoveChars(str, k));
}
}
|
Javascript
function removeChars(str, k) {
let freq = {};
for (let i = 0; i < str.length; i++) {
if (freq[str[i]]) {
freq[str[i]]++;
} else {
freq[str[i]] = 1;
}
}
let res = "" ;
for (let i = 0; i < str.length; i++) {
if (freq[str[i]] >= k) {
res += str[i];
}
}
return res;
}
let str = "geeksforgeeks" ;
let k = 2;
console.log(removeChars(str, k));
|
Time Complexity: O(N), where N is the length of the given string.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...