Skip to content

Commit ad51a82

Browse files
authored
Create 3389.Minimum-Operations-to-Make-Character-Frequencies-Equal.cpp
1 parent 3ed821c commit ad51a82

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
public:
3+
int makeStringGood(string s)
4+
{
5+
vector<int>freq(26);
6+
for (char c : s) {
7+
freq[c-'a']++;
8+
}
9+
int max_freq = *max_element(freq.begin(), freq.end());
10+
11+
int ret = INT_MAX/2;
12+
vector<int>diff(26);
13+
14+
for (int target = 1; target <= max_freq; target++)
15+
{
16+
for (int i=0; i<26; i++)
17+
diff[i] = freq[i] - target;
18+
vector<vector<int>>dp(26, vector<int>(2, INT_MAX/2));
19+
20+
int carry;
21+
dp[0][0] = freq[0];
22+
dp[0][1] = abs(diff[0]);
23+
24+
for (int i=1; i<26; i++)
25+
{
26+
dp[i][0] = min(dp[i-1][0], dp[i-1][1]) + freq[i];
27+
28+
dp[i][1] = min(dp[i-1][0], dp[i-1][1]) + abs(diff[i]);
29+
30+
if (i>=1 && diff[i-1]>0 && diff[i]<0)
31+
{
32+
int common = min(abs(diff[i-1]), abs(diff[i]));
33+
dp[i][1] = min(dp[i][1], dp[i-1][1] + abs(diff[i])-common);
34+
}
35+
36+
if (i>=1 && freq[i-1]>0 && diff[i]<0)
37+
{
38+
int common = min(abs(freq[i-1]), abs(diff[i]));
39+
dp[i][1] = min(dp[i][1], dp[i-1][0] + abs(diff[i])-common);
40+
}
41+
}
42+
43+
ret = min(ret, min(dp[25][0], dp[25][1]));
44+
}
45+
46+
return ret;
47+
}
48+
};

0 commit comments

Comments
 (0)