Skip to content

3389. Minimum Operations to Make Character Frequencies Equal

Description

You are given a string s.

A string t is called good if all characters of t occur the same number of times.

You can perform the following operations any number of times:

  • Delete a character from s.
  • Insert a character in s.
  • Change a character in s to its next letter in the alphabet.

Note that you cannot change 'z' to 'a' using the third operation.

Return the minimum number of operations required to make s good.

 

Example 1:

Input: s = "acab"

Output: 1

Explanation:

We can make s good by deleting one occurrence of character 'a'.

Example 2:

Input: s = "wddw"

Output: 0

Explanation:

We do not need to perform any operations since s is initially good.

Example 3:

Input: s = "aaabc"

Output: 2

Explanation:

We can make s good by applying these operations:

  • Change one occurrence of 'a' to 'b'
  • Insert one occurrence of 'c' into s

 

Constraints:

  • 3 <= s.length <= 2 * 104
  • s contains only lowercase English letters.

Solutions

Solution 1

Thinking

By inserting, deleting, or changing letters we want every frequency to be \(0\) or a common \(t\). With \(|s| \le 2 \times 10^4\) we try each \(t\) and assign the \(26\) counts.

A change moves one count to another; inserts and deletes are charged separately. For a fixed \(t\) we match each frequency to “keep \(t\) or drop to zero”.

The answer is the best \(t\). \(t\) need not exceed the largest frequency, so the enumeration is small.

1

1

1

1

Comments