
2026-02-20:众数频率字符。用go语言,给定一个只含小写字母的字符串 s。
把所有在 s 中出现次数相同的字母归为一类:对于某个整数 k,出现恰好 k 次的字母构成一组。
我们要找出那一组字母,其成员(不同字母)数量比其它任何组都多。
将该组里的所有字母串成一个返回值字符串,字母顺序不限。
如果存在两个或多个组成员数相同且并列最多,则取出现次数 k 较大的那一组。
1 <= s.length <= 100。
s 只包含小写英文字母。
输入: s = "aaabbbccdddde"。
输出: "ab"。
解释:
频率 (k) | 组中不同字符 | 组大小 | 是否众数? |
|---|---|---|---|
4 | {d} | 1 | 否 |
3 | {a, b} | 2 | 是 |
2 | {c} | 1 | 否 |
1 | {e} | 1 | 否 |
字符 'a' 和 'b' 的频率相同,都为 3,它们在众数频率组中。
题目来自力扣3692。
题目要求:根据字符出现的频率对字母进行分组,找出成员数量最多的那一组(如果存在并列最多,则选择频率 k 较大的组),并将该组的所有字母拼接成字符串返回。
以输入 s = "aaabbbccdddde" 为例,详细步骤如下:
"aaabbbccdddde",统计每个小写字母出现的次数:a: 3 次b: 3 次c: 2 次d: 4 次e: 1 次{d}(1 个字母){a, b}(2 个字母){c}(1 个字母){e}(1 个字母)[a, b] 拼接成字符串 "ab"(字母顺序不限)。ab.
package main
import (
"fmt"
)
func majorityFrequencyGroup(s string)string {
cnt := [26]int{}
for _, b := range s {
cnt[b-'a']++
}
groups := map[int][]byte{}
mx := 0
for i, c := range cnt {
if c == 0 {
continue
}
groups[c] = append(groups[c], 'a'+byte(i))
iflen(groups[c]) > len(groups[mx]) || len(groups[c]) == len(groups[mx]) && c > mx {
mx = c
}
}
returnstring(groups[mx])
}
func main() {
s := "aaabbbccdddde"
result := majorityFrequencyGroup(s)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def majority_frequency_group(s: str) -> str:
# 统计每个字符的出现频率
cnt = [0] * 26
for ch in s:
cnt[ord(ch) - ord('a')] += 1
# 按频率分组存储字符
groups = {}
mx = 0 # 记录当前最大频率
for i, c in enumerate(cnt):
if c == 0:
continue
# 将字符添加到对应频率的分组中
if c not in groups:
groups[c] = []
groups[c].append(chr(ord('a') + i))
# 更新最大频率的选择标准:
# 1. 当前分组的字符数量大于最大频率分组的字符数量
# 2. 或者字符数量相等但当前频率值更大
if mx not in groups:
mx = c
elif len(groups[c]) > len(groups[mx]):
mx = c
elif len(groups[c]) == len(groups[mx]) and c > mx:
mx = c
# 返回最大频率分组中的所有字符组成的字符串
return''.join(sorted(groups[mx])) # 排序以保证输出顺序一致
# 测试
if __name__ == "__main__":
s = "aaabbbccdddde"
result = majority_frequency_group(s)
print(result)
.
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
string majorityFrequencyGroup(string s) {
// 统计每个字符的出现频率
vector<int> cnt(26, 0);
for (char ch : s) {
cnt[ch - 'a']++;
}
// 按频率分组存储字符
unordered_map<int, vector<char>> groups;
int mx = 0; // 记录当前最大频率
for (int i = 0; i < 26; i++) {
int c = cnt[i];
if (c == 0) {
continue;
}
// 将字符添加到对应频率的分组中
groups[c].push_back('a' + i);
// 更新最大频率的选择标准:
// 1. 当前分组的字符数量大于最大频率分组的字符数量
// 2. 或者字符数量相等但当前频率值更大
if (groups.count(mx) == 0) {
mx = c;
} elseif (groups[c].size() > groups[mx].size()) {
mx = c;
} elseif (groups[c].size() == groups[mx].size() && c > mx) {
mx = c;
}
}
// 对结果中的字符排序,保证输出顺序一致
vector<char>& result_chars = groups[mx];
sort(result_chars.begin(), result_chars.end());
// 将字符向量转换为字符串
returnstring(result_chars.begin(), result_chars.end());
}
int main() {
string s = "aaabbbccdddde";
string result = majorityFrequencyGroup(s);
cout << result << endl;
return0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·