문자열이 주어질 때 문자들의 빈도수를 고유하게 해야한다.
고유하지 않은 빈도수의 문자는 하나씩 삭제하여 빈도수를 낮출 수 있다.
문자마다 고유 빈도수로 만들때 삭제를 최소로 반복한 수를 구하는 문제이다.
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;
}
};