Skip to content

Commit ca5e0d5

Browse files
authored
Update minimum-deletions-to-make-string-k-special.cpp
1 parent 07e46d9 commit ca5e0d5

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

C++/minimum-deletions-to-make-string-k-special.cpp

+35-1
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,44 @@ class Solution {
5858
}
5959
};
6060

61+
// Time: O(n + 26 * log(26))
62+
// Space: O(26)
63+
// freq table, sort, two pointers
64+
class Solution2 {
65+
public:
66+
int minimumDeletions(string word, int k) {
67+
vector<int> cnt(26);
68+
for (const auto& x : word) {
69+
++cnt[x - 'a'];
70+
}
71+
vector<int> arr;
72+
for (const auto& x : cnt) {
73+
if (!x) {
74+
continue;
75+
}
76+
arr.emplace_back(x);
77+
}
78+
sort(begin(arr), end(arr));
79+
int result = size(word);
80+
for (int left = 0, right = 0, prev = -1, prefix = 0, suffix = size(word); left < size(arr); ++left) {
81+
if (left + 1 < size(arr) && arr[left + 1] == arr[left]) {
82+
continue;
83+
}
84+
while (right < size(arr) && arr[right] <= arr[left] + k) {
85+
suffix -= arr[right++];
86+
}
87+
result = min(result, prefix + (suffix - (arr[left] + k) * (static_cast<int>(size(arr)) - right)));
88+
prefix += arr[left] * (left - prev);
89+
prev = left;
90+
}
91+
return result;
92+
}
93+
};
94+
6195
// Time: O(n + 26^2)
6296
// Space: O(26)
6397
// freq table
64-
class Solution2 {
98+
class Solution3 {
6599
public:
66100
int minimumDeletions(string word, int k) {
67101
vector<int> cnt(26);

0 commit comments

Comments
 (0)