2025-10-25:找到频率最高的元音和辅音。用go语言,给你一个只包含小写英文字母的字符串 s。请分别在元音集合 {a, e
【摘要】 2025-10-25:找到频率最高的元音和辅音。用go语言,给你一个只包含小写英文字母的字符串 s。请分别在元音集合 {a, e, i, o, u} 和其余字母(即辅音)中找出各自出现次数最多的字母,然后把这两个最大出现次数相加并返回结果。若元音或辅音在字符串中完全未出现,则把对应的次数视为 0;若有多种字母并列为最高频,任选其中一种即可。字母的“出现次数”即该字母在 s 中出现了多少次。1...
2025-10-25:找到频率最高的元音和辅音。用go语言,给你一个只包含小写英文字母的字符串 s。请分别在元音集合 {a, e, i, o, u} 和其余字母(即辅音)中找出各自出现次数最多的字母,然后把这两个最大出现次数相加并返回结果。若元音或辅音在字符串中完全未出现,则把对应的次数视为 0;若有多种字母并列为最高频,任选其中一种即可。字母的“出现次数”即该字母在 s 中出现了多少次。
1 <= s.length <= 100。
s 只包含小写英文字母。
输入: s = “successes”。
输出: 6。
解释:
元音有:‘u’ 出现 1 次,‘e’ 出现 2 次。最大元音频率 = 2。
辅音有:‘s’ 出现 4 次,‘c’ 出现 2 次。最大辅音频率 = 4。
输出为 2 + 4 = 6。
题目来自力扣3541。
1. 统计字符频率
首先,遍历字符串 s,用一个 map[byte]int 来记录每个字符出现的次数。
例如 s = "successes":
s→ 4 次u→ 1 次c→ 2 次e→ 2 次
其他字母未出现。
2. 分别找元音和辅音的最大频率
初始化 vowel = 0 和 consonant = 0。
然后遍历 26 个小写字母 'a' 到 'z':
- 对于每个字母,从
mp中取出它的出现次数count(如果没出现过就是 0)。 - 判断该字母是否为元音(
a, e, i, o, u之一):- 如果是元音,则更新
vowel = max(vowel, count)。 - 如果是辅音,则更新
consonant = max(consonant, count)。
- 如果是元音,则更新
3. 示例 "successes" 的详细计算
-
元音字母:
a→ 0e→ 2 →vowel = 2i→ 0o→ 0u→ 1 →vowel = max(2, 1) = 2
所以元音最大频率 = 2。
-
辅音字母:
b~d等略过c→ 2 →consonant = 2s→ 4 →consonant = max(2, 4) = 4
所以辅音最大频率 = 4。
结果 = 2 + 4 = 6。
4. 时间复杂度
- 遍历字符串一次,长度 n,O(n)。
- 遍历 26 个字母,固定 O(26) 即 O(1)。
总时间复杂度:O(n)。
5. 空间复杂度
- 哈希表
mp最多存储 26 个不同字母的计数,所以额外空间是 O(26) 即 O(1)(因为字母表固定大小)。 - 其他变量是常数空间。
总额外空间复杂度:O(1)。
Go完整代码如下:
package main
import (
"fmt"
)
func maxFreqSum(s string) int {
mp := make(map[byte]int)
for i := 0; i < len(s); i++ {
mp[s[i]]++
}
vowel, consonant := 0, 0
for ch := 'a'; ch <= 'z'; ch++ {
count := mp[byte(ch)]
if isVowel(byte(ch)) {
vowel = max(vowel, count)
} else {
consonant = max(consonant, count)
}
}
return vowel + consonant
}
func isVowel(c byte) bool {
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'
}
func main() {
s := "successes"
result := maxFreqSum(s)
fmt.Println(result)
}

Python完整代码如下:
# -*-coding:utf-8-*-
def max_freq_sum(s: str) -> int:
mp = {}
for char in s:
mp[char] = mp.get(char, 0) + 1
vowel = 0
consonant = 0
for ch in 'abcdefghijklmnopqrstuvwxyz':
count = mp.get(ch, 0)
if is_vowel(ch):
vowel = max(vowel, count)
else:
consonant = max(consonant, count)
return vowel + consonant
def is_vowel(c: str) -> bool:
return c in {'a', 'e', 'i', 'o', 'u'}
if __name__ == "__main__":
s = "successes"
result = max_freq_sum(s)
print(result)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)