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)