Minimum Deletions to Make Character Frequencies Unique

ㅋㅋ·2022년 6월 28일

알고리즘-leetcode

목록 보기
19/135

문자열이 주어질 때 문자들의 빈도수를 고유하게 해야한다.

고유하지 않은 빈도수의 문자는 하나씩 삭제하여 빈도수를 낮출 수 있다.

문자마다 고유 빈도수로 만들때 삭제를 최소로 반복한 수를 구하는 문제이다.

class Solution {
public:
    int minDeletions(string s) {
        
        unordered_map<char, int> frequencyTable{};
        
        for (char &c : s)
        {
            frequencyTable[c]++;
        }
        
        unordered_set<int> unique{};
        int result{0};

        for (auto it = frequencyTable.begin(); it != frequencyTable.end(); it++)
        {
            char c{it->first};
            int number{it->second};
            
            
            if (unique.count(number) == 0)
            {
                unique.insert(number);
                continue;
            }
            
            for (int i = number - 1; 0 <= i; i--)
            {
                if (unique.count(i) == 0)
                {
                    unique.insert(i);
                    result += (number - i);
                    break;
                }
                
                if (i == 0)
                {
                    result += number;
                }
            }
        }
        
        return result;
    }
};

0개의 댓글