首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2025-10-25:找到频率最高的元音和辅音。用go语言,给你一个只包含小写英文字母的字符串 s。请分别在元音集合 {a, e

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

作者头像
福大大架构师每日一题
发布2025-12-18 15:46:18
发布2025-12-18 15:46:18
1350
举报

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完整代码如下:

.

代码语言:javascript
复制
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完整代码如下:

.

代码语言:javascript
复制
# -*-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)

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 统计字符频率
  • 2. 分别找元音和辅音的最大频率
  • 3. 示例 "successes" 的详细计算
  • 4. 时间复杂度
  • 5. 空间复杂度
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档