Minimum Deletions to Make Character Frequencies Unique

class Solution {
    // time complexity O(N)
    public int minDeletions(String s) {
        final int SIZE = 26;
        int[] frequency = new int[SIZE];
        
        for (char c: s.toCharArray()) {
            frequency[c - 'a']++;
        }
        
        Arrays.sort(frequency);
        int minDelete = 0;
        int maxAllowed = s.length();
        
        for (int i = SIZE - 1; i >= 0 && frequency[i] > 0; i--) {
            if (frequency[i] > maxAllowed) {
                minDelete += frequency[i] - maxAllowed;
                frequency[i] = maxAllowed;
            }
            maxAllowed = Math.max(0, frequency[i] - 1);
        }
        return minDelete;
    }
}

Last updated