Open In App

Operations required to make the string empty

Improve
Improve
Like Article
Like
Save
Share
Report

Given a string str, the task is to make the string empty with the given operation. In a single operation, you can pick some characters of the string (each of the picked characters should have the same frequency) and remove them from the string. Print the total operations required to make the string empty.

Examples: 

Input: str = “aabbccc” 
Output:
In one operation, characters ‘a’ and ‘b’ can be removed since both have the same frequency. 
Second operation can remove character ‘c’ having frequency 3. 
Total 2 operations are required.

Input: str = “geeksforgeeks” 
Output:

Approach: 

Find unique frequencies of the characters of the string. Total count of unique frequencies will be the number of operations required to make the string empty. 
For str = “aaabbbcccc”, unique frequencies are 3 and 4. Total count of unique frequencies is 2
HashMap can be used to store the characters and their frequencies then HashSet can be used to find the count of unique frequencies which is the number of operations required.

Below is the implementation of the above approach: 

C++




// CPP implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count of operations required
int totalOperations(string str, int len)
{
    // HashMap to store characters and their frequencies
    unordered_map<char, int> h;
    for (int i = 0; i < len; i++)
 
        // If already contains the character then
        // increment its frequency by 1
        h[str[i]]++;
 
    // HashSet to store unique frequency
    unordered_set<int> hs;
 
    // Insert frequencies into HashSet
    for (auto i : h)
        hs.insert(i.second);
 
    // Count of unique frequencies
    return hs.size();
}
 
// Driver Code
int main()
{
    string str = "geeksforgeeks";
    int len = str.length();
 
    cout << totalOperations(str, len) << endl;
    return 0;
}
 
// This code is contributed by
// sanjeev2552


Java




// Java implementation of the approach
import java.util.*;
class GFG {
 
    // Function to return the count of operations required
    static int totalOperations(String str, int len)
    {
 
        // HashMap to store characters and their frequencies
        HashMap<Character, Integer> h = new HashMap<Character, Integer>();
        for (int i = 0; i < len; i++) {
 
            // If already contains the character then
            // increment its frequency by 1
            if (h.containsKey(str.charAt(i)))
                h.put(str.charAt(i), h.get(str.charAt(i)) + 1);
 
            // Else add the character to the HashMap with frequency 1
            else
                h.put(str.charAt(i), 1);
        }
 
        // Set to iterate over HashMap
        Set<Map.Entry<Character, Integer> > set = h.entrySet();
 
        // HashSet to store unique frequency
        HashSet<Integer> hs = new HashSet<Integer>();
 
        // Insert frequencies into HashSet
        for (Map.Entry<Character, Integer> me : set)
            hs.add(me.getValue());
 
        // Count of unique frequencies
        return hs.size();
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String str = "geeksforgeeks";
        int len = str.length();
        System.out.println(totalOperations(str, len));
    }
}


Python3




# Python implementation of the approach
 
# Function to return the count of operations required
def totalOperations(st, length):
     
    # Dictionary to store characters and their frequencies
    d = {}
    for i in range(length):
         
        # If already contains the character then
        # increment its frequency by 1
        if st[i] in d:
            d[st[i]] += 1
         
        # Else add the character to the HashMap with frequency 1
        else:
            d[st[i]] = 1
 
    # Set to Store unique frequency
    valueSet = set()
 
    # Insert frequencies into HashSet
    for key in d.keys():
        valueSet.add(d[key])
     
    # Count of unique frequencies
    return len(valueSet)
 
# Driver Code
st = "geeksforgeeks"
l = len(st)
print(totalOperations(st, l))
 
# This code is contributed by Vivekkumar Singh


C#




// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function to return
// the count of operations required
static int totalOperations(String str, int len)
{
 
    // HashMap to store characters
    // and their frequencies
    Dictionary<char,
               int> h = new Dictionary<char,
                                       int>();
    for (int i = 0; i < len; i++)
    {
 
        // If already contains the character then
        // increment its frequency by 1
        if (h.ContainsKey(str[i]))
            h[str[i]] = h[str[i]] + 1;
 
        // Else add the character
        // to the HashMap with frequency 1
        else
            h.Add(str[i], 1);
    }
 
    // Set to iterate over HashMap
    // HashSet to store unique frequency
    HashSet<int> hs = new HashSet<int>();
 
    // Insert frequencies into HashSet
    foreach(KeyValuePair<char, int> me in h)
        hs.Add(me.Value);
 
    // Count of unique frequencies
    return hs.Count;
}
 
// Driver code
public static void Main(String[] args)
{
    String str = "geeksforgeeks";
    int len = str.Length;
    Console.WriteLine(totalOperations(str, len));
}
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to return the count of operations required
function totalOperations(str, len)
{
    // HashMap to store characters and their frequencies
    var h = new Map();
    for (var i = 0; i < len; i++)
 
        // If already contains the character then
        // increment its frequency by 1
        if(h.has(str[i]))
            h.set(str[i], h.get(str[i])+1)
        else
            h.set(str[i], 1)
 
    // HashSet to store unique frequency
    var hs = new Set();
 
    // Insert frequencies into HashSet
    h.forEach((value, key) => {
         
        hs.add(value);
    });
 
    // Count of unique frequencies
    return hs.size;
}
 
// Driver Code
var str = "geeksforgeeks";
var len = str.length;
document.write( totalOperations(str, len));
 
// This code is contributed by itsok.
</script>


Output

3

Complexity Analysis:

  • Time complexity: O(n)
  • Auxiliary Space: O(n)


Last Updated : 15 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads