📅  最后修改于: 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)$,因为字符集大小有限,哈希表的空间复杂度为常数。
本题考察了哈希表求解字符出现次数的方法,以及贪心算法的思想。