Problem Breakdown:
You're given a string word and an integer k.
A string is k-special if for every pair of characters, the difference in their frequency is at most k.
Formally:
For all characters i and j in the string:
|freq(i) - freq(j)| <= k
🎯 Goal:
Minimize the number of deletions needed to satisfy the above condition.
✅ Approach:
Count frequency of each character.
Try each possible target frequency, say f, from 1 up to the max frequency.
For each target f, ensure that every character has frequency between [f, f + k].
If a character has freq < f or freq > f + k, delete extra characters or all of them.
Return the minimum deletions over all such target frequencies.
`Java 
`import java.util.*;
class Solution {
    public int minimumDeletions(String word, int k) {
        int[] freq = new int[26];
        for (char ch : word.toCharArray()) {
            freq[ch - 'a']++;
        }
    List<Integer> freqs = new ArrayList<>();
    for (int f : freq) {
        if (f > 0) freqs.add(f);
    }
    Collections.sort(freqs);
    int minDeletions = Integer.MAX_VALUE;
    for (int i = 0; i < freqs.size(); i++) {
        int target = freqs.get(i);
        int deletions = 0;
        for (int f : freqs) {
            if (f < target) {
                deletions += f;  // remove all
            } else if (f > target + k) {
                deletions += f - (target + k);
            }
        }
        minDeletions = Math.min(minDeletions, deletions);
    }
    return minDeletions;
}
}
`
              
    
Top comments (0)