Skip to main content

451.按频率排序字符

标签: hash-table, sort, string

难度: Medium

通过率: 73.35%

原题链接: https://leetcode.com/problems/sort-characters-by-frequency/description/

题目描述

给定一个字符串 ss,按字符出现的频率降序排列。字符的频率是它在字符串中出现的次数。返回排序后的字符串。如果有多种排序结果,返回其中任意一个。

解题思路

首先,我们需要计算每个字符在字符串中出现的次数。然后可以将字符按照出现的频率进行排序。要实现这一点,我们可以采取以下步骤:

  1. 使用哈希表来统计每个字符出现的频率。
  2. 将字符和它们的频率存储到一个列表中。
  3. 对列表按照频率进行降序排序。
  4. 根据排序后的结果构建新字符串。

代码实现

from collections import Counter

# 定义函数,接受字符串s作为参数
def frequencySort(s: str) -> str:
# 使用Counter统计每个字符的频率
freq = Counter(s)

# 根据频率对字符进行排序,然后用join函数合并字符
# key=lambda x: (-x[1], x[0])表示按频率降序排序
return ''.join([char * times for char, times in freq.most_common()])

# 示例用法
s = "tree"
print(frequencySort(s)) # 输出:"eert"

复杂度分析

时间复杂度是 O(nlogn)O(n \log n),其中 nn 是字符串的长度。在最坏情况下,我们需要对所有字符进行统计和排序。排序步骤是时间复杂度的主要贡献者。

空间复杂度是 O(n)O(n),用于存储字符的频率以及排序后的字符。