From 0d1ecf1fdc04ab3d1bcba245c49d8c7b77ad7294 Mon Sep 17 00:00:00 2001 From: Eat-Swap Date: Tue, 28 Jun 2022 10:53:25 +0800 Subject: [PATCH] add: 220628 --- cpp/2206/220628.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ cpp/2206/CMakeLists.txt | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 cpp/2206/220628.cpp diff --git a/cpp/2206/220628.cpp b/cpp/2206/220628.cpp new file mode 100644 index 0000000..b61f240 --- /dev/null +++ b/cpp/2206/220628.cpp @@ -0,0 +1,40 @@ +#include +#include +#include + +/** + * 1647. Minimum Deletions to Make Character Frequencies Unique + * A string s is called good if there are no two different characters in s that have the same frequency. + * Given a string s, return the minimum number of characters you need to delete to make s good. + * The frequency of a character in a string is the number of times it appears in the string. For example, in the string "aab", the frequency of 'a' is 2, while the frequency of 'b' is 1. + */ + +class Solution { +public: + static int minDeletions(const std::string& s) { + int cnt[26]{}; + for (char c : s) + ++cnt[c - 'a']; + std::set t; + int ans = 0; + for (int n : cnt) { + if (!n) + continue; + if (!t.count(n)) { + t.insert(n); + continue; + } + auto it = t.lower_bound(n); + for (; it != t.begin() && *it - *std::prev(it) == 1; --it); + if (*it - 1) + t.insert(*it - 1); + ans += n - (*it - 1); + } + return ans; + } +}; + +int main() { + std::cout << Solution::minDeletions("bbcebab"); + return 0; +} diff --git a/cpp/2206/CMakeLists.txt b/cpp/2206/CMakeLists.txt index 8014aae..3ec16fe 100644 --- a/cpp/2206/CMakeLists.txt +++ b/cpp/2206/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2206) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2206 220624.cpp) +ADD_EXECUTABLE(2206 220628.cpp)