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

举报
福大大架构师每日一题 发表于 2025/10/25 06:34:44 2025/10/25
【摘要】 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 = 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)

在这里插入图片描述

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

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。