<p>A string <code>s</code> is called <strong>good</strong> if there are no two different characters in <code>s</code> that have the same <strong>frequency</strong>.</p>

<p>Given a string <code>s</code>, return<em> the <strong>minimum</strong> number of characters you need to delete to make </em><code>s</code><em> <strong>good</strong>.</em></p>

<p>The <strong>frequency</strong> of a character in a string is the number of times it appears in the string. For example, in the string <code>&quot;aab&quot;</code>, the <strong>frequency</strong> of <code>&#39;a&#39;</code> is <code>2</code>, while the <strong>frequency</strong> of <code>&#39;b&#39;</code> is <code>1</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;aab&quot;
<strong>Output:</strong> 0
<strong>Explanation:</strong> <code>s</code> is already good.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;aaabbbcc&quot;
<strong>Output:</strong> 2
<strong>Explanation:</strong> You can delete two &#39;b&#39;s resulting in the good string &quot;aaabcc&quot;.
Another way it to delete one &#39;b&#39; and one &#39;c&#39; resulting in the good string &quot;aaabbc&quot;.</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;ceabaacb&quot;
<strong>Output:</strong> 2
<strong>Explanation:</strong> You can delete both &#39;c&#39;s resulting in the good string &quot;eabaab&quot;.
Note that we only care about characters that are still in the string at the end (i.e. frequency of 0 is ignored).
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
	<li><code>s</code>&nbsp;contains only lowercase English letters.</li>
</ul>

from collections import Counter

class Solution(object):
    def minDeletions(self, s):
        """
        :type s: str
        :rtype: int
        """
        # Count occurrences of each character in the string
        char_count = Counter(s)

        # Create an array with counts of each character and sort it
        arr = sorted(char_count.values(), reverse=True)

        # Initialize the maximum count and steps
        max_count = max(arr)
        c = max_count
        steps = 0

        # Function to perform deletion based on the conditions given
        def deletion(n, c):
            if n >= c:
                return (n - c) * c + c * (c - 1) / 2
            else:
                return n * (n - 1) / 2

        # Perform the steps as in the original code
        while c != 0:
            n = arr.count(c)
            if n > 1:
                x = deletion(n, c)
                steps += x
                pos = arr.index(c)
                point = 1
                if n > c:
                    for i in range(pos, pos + n - c):
                        arr[i] = 0
                    value = 1
                    for i in range(pos + n - c, pos + n):
                        arr[i] = value
                        value += 1
                elif n <= c:
                    value = c - n + 1
                    for i in range(pos, pos + n - 1):
                        arr[i] = value
                        value += 1
                arr.sort(reverse=True)
            c -= 1

        return int(steps)

# Example usage:
# sol = Solution()
# print(sol.minDeletions("baeccdae"))
131