2025-10-25:找到频率最高的元音和辅音。用go语言,给你一个只包含小写英文字母的字符串 s。请分别在元音集合 {a, e, i, o, u} 和其余字母

37 阅读2分钟

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 = 0consonant = 0
然后遍历 26 个小写字母 'a''z'

  • 对于每个字母,从 mp 中取出它的出现次数 count(如果没出现过就是 0)。
  • 判断该字母是否为元音(a, e, i, o, u 之一):
    • 如果是元音,则更新 vowel = max(vowel, count)
    • 如果是辅音,则更新 consonant = max(consonant, count)

3. 示例 "successes" 的详细计算

  • 元音字母:

    • a → 0
    • e → 2 → vowel = 2
    • i → 0
    • o → 0
    • u → 1 → vowel = max(2, 1) = 2 所以元音最大频率 = 2。
  • 辅音字母:

    • b ~ d 等略过
    • c → 2 → consonant = 2
    • s → 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)

在这里插入图片描述