LeetCode Biweekly Contest 166
本文介绍解决此次比赛中题目(3692 - 3695)的思路与想法。
3692. Majority Frequency Characters
题目大意
给一个字符串 s
,对于 s
中出现的每一个字母,假设其出现的次数为 k
,则其属于 frequency group k
。问在所有的 frequency group 中,包含字符数最多(如果相同则选择 k
更大的)的那一组中包含了什么字母。可以使用任意顺序输出组中的字母。
思路
s.length
较小可以直接模拟 / 暴力
先统计每一个字符出现的次数
1 | char_freqs = [0 for _ in range(26)] # char_freqs[i] 表示 'a' + i 这个字符出现的次数 |
接着将出现次数相同的字符添加到同一个组里
1 | freq_groups = [[] for _ in range(100 + 1)] # 由于 len(s) <= 100,则一个字符最多出现100次,于是 k <= 100,可以用数组解决。若 k 过大可以使用 dict |
为了避免将从未出现的字母添加到 freq_groups[0]
中,添加一个小小的判断,或者在下面统计组中字母数量时使用 range(1, 101)
1 | if char_freq != 0: |
最后就是统计每个组里字母的数量了
1 | ans_idx = -1 |
输出!
1 | return ''.join(freq_groups[ans_idx]) |
复杂度
O(len(s))