📌  相关文章
📜  最小化使字符串的所有其余字符唯一所需的删除成本(1)

📅  最后修改于: 2023-12-03 15:26:26.618000             🧑  作者: Mango

最小化使字符串的所有其余字符唯一所需的删除成本

问题描述

给定一个字符串s,我们可以通过删除s中的任意字符来使s变得唯一。计算最小化使字符串s的所有其余字符唯一所需的删除成本。

示例

输入: "aab" 输出: 0 解释: s已经是一个唯一字符串。

输入: "aaa" 输出: 2 解释: 我们可以删除两个'a'字符,得到唯一字符串"a"。

输入: "aba" 输出: 1 解释: 我们可以删除字符'b',得到唯一字符串"a"。

解题思路

我们可以通过哈希表来记录s中每个字符出现的次数,然后再找出出现次数最多的字符,将其余字符删除即可。

代码如下:

class Solution:
    def minCost(self, s: str) -> int:
        # 记录字符出现次数的哈希表
        char_count = {}
        for char in s:
            if char in char_count:
                char_count[char] += 1
            else:
                char_count[char] = 1
        
        # 找出出现次数最多的字符
        max_count = max(char_count.values())
        
        # 计算删除其余字符的成本
        cost = 0
        for count in char_count.values():
            if count < max_count:
                cost += count
            elif count > max_count:
                cost += count - max_count
        
        return cost
复杂度分析

时间复杂度:$O(n)$,其中 $n$ 是字符串s的长度。

空间复杂度:$O(1)$,因为字符集大小有限,哈希表的空间复杂度为常数。

总结

本题考察了哈希表求解字符出现次数的方法,以及贪心算法的思想。