当前位置: 首页 > news >正文

【LeetCode 每日一题】3541. 找到频率最高的元音和辅音

Problem: 3541. 找到频率最高的元音和辅音

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(N)
    • 空间复杂度:O(N)

整体思路

这段代码的目的是计算一个给定字符串 s 中,单个元音字母的最大出现频率单个辅音字母的最大出现频率之和。

该算法采用了一种高效的 单次遍历 结合 频率计数 的策略来解决问题。它在一次遍历中同时完成了所有必要信息的收集和更新。

其核心逻辑步骤如下:

  1. 数据结构与初始化

    • 算法使用一个大小为 26 的整型数组 fre 来作为频率计数器(或哈希表),fre[i] 存储字符 'a' + i 的出现次数。这基于一个假设:输入字符串 s 只包含小写英文字母。
    • 初始化两个变量 vowelconsonant 为 0。这两个变量将分别用于动态追踪在遍历过程中遇到的元音和辅音的历史最高频率
  2. 单次遍历与动态更新

    • 算法通过一个 for-each 循环遍历字符串 s(已转换为字符数组)中的每一个字符 c
    • 对于每个字符 c,执行以下操作:
      a. 更新频率fre[c - 'a']++,将当前字符的频率加一。
      b. 分类:通过一个 if 语句判断 c 是元音还是辅音。
      c. 更新最大值
      * 如果 c 是元音,就用它当前的频率 fre[c - 'a']已经记录的元音最大频率 vowel 进行比较,并将 vowel 更新为较大者。
      * 如果 c 是辅音,同理,更新 consonant 的值。
    • 这个动态更新是算法的关键。例如,对于字符串 “banana”,当遍历到第三个 ‘a’ 时,fre['a'-'a'] 变为 3,vowel 也会被更新为 3。vowelconsonant 始终保存着到目前为止,所有元音/辅音中出现过的最高频次。
  3. 返回结果

    • 在遍历完整个字符串后,vowel 变量中存储的就是所有元音字母中的最高频率,而 consonant 变量中存储的就是所有辅音字母中的最高频率。
    • 最后,函数返回这两个值的和 vowel + consonant

完整代码

class Solution {/*** 计算字符串中单个元音的最大频率与单个辅音的最大频率之和。* @param s 输入的字符串(假定只包含小写英文字母)* @return 元音最大频率 + 辅音最大频率*/public int maxFreqSum(String s) {// fre: 用于存储每个小写字母的频率。fre[0] for 'a', fre[1] for 'b', ...int[] fre = new int[26];// vowel: 用于追踪遍历过程中遇到的元音的最高频率int vowel = 0;// consonant: 用于追踪遍历过程中遇到的辅音的最高频率int consonant = 0;// 遍历字符串中的每一个字符for (char c : s.toCharArray()) {// 增加当前字符的频率计数fre[c - 'a']++;// 判断当前字符是元音还是辅音if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {// 如果是元音,用其当前频率更新元音的历史最高频率vowel = Math.max(vowel, fre[c - 'a']);} else {// 如果是辅音,用其当前频率更新辅音的历史最高频率consonant = Math.max(consonant, fre[c - 'a']);}}// 返回追踪到的元音最大频率和辅音最大频率之和return vowel + consonant;}
}

时空复杂度

时间复杂度:O(N)

  1. 字符串转换s.toCharArray() 会创建一个字符串 s 的字符数组副本。如果字符串长度为 N,这个操作的时间复杂度是 O(N)。
  2. 循环for (char c : ...) 循环会遍历整个字符数组一次,执行 N 次。
  3. 循环内部操作:循环内部的数组访问、比较和 Math.max 都是 O(1) 的常数时间操作。

综合分析
算法的总时间复杂度由字符串转换和线性扫描决定。因此,其时间复杂度为 O(N),其中 N 是字符串 s 的长度。

空间复杂度:O(N)

  1. 主要存储开销
    • int[] fre = new int[26]: 频率数组的大小是固定的 26,不随输入 N 的大小变化。因此,它占用 O(1) 的常数空间。
    • s.toCharArray(): 这个方法会创建一个新的字符数组来存储字符串的内容。这个新数组的长度与输入字符串 s 的长度 N 相同,占用 O(N) 的空间。

综合分析
算法所需的额外空间主要由 toCharArray() 创建的副本决定。因此,其空间复杂度为 O(N)

http://www.dtcms.com/a/394247.html

相关文章:

  • Arithmetics Competition(贪心+排序+前缀和)
  • 运维安全07 ,JumpServer(堡垒机)介绍以及使用
  • 数据结构算法学习:LeetCode热题100-双指针篇(移动零、盛水最多的容器、三数之和、接雨水)
  • 2025年ESWA SCI1区TOP,复杂威胁环境下带偏差采样的多无人机路径规划、候选物评估与路径重构问题,深度解析+性能实测
  • SeaTunnel 迁移 MySQL 数据到 Easysearch 之批量导入(Batch)
  • JavaWeb 课堂笔记 —— 19 SpringBootWeb案例 文件上传
  • 《时空回响--时之鳞》的现代意义与2025年的现实映射
  • Qwen3Next注意力机制详解与实现
  • .net 8自包含应用发布在Linux怎么运行
  • 第十七周 学习周报
  • 手眼标定问题总结
  • 第一章 假设二:走势是时间信息序列
  • MLP全连接网络
  • 任天堂GBA游戏ROM分类精选合集 GBA工具、GBA模拟器分享 GBA金手指全集+GBA转换器
  • STM32光强传感器实验详解
  • 基于单片机的数字电压表设计
  • 搜索百科(3):Elasticsearch — 搜索界的“流量明星”
  • 【嵌入式】CAN协议学习笔记
  • NeurIPS 2025 spotlight |FSDrive 自动驾驶迈向视觉推理
  • Linux系统编程--进程信号
  • 数据结构代码整理
  • 软件开发测试的W模型:构建高质量产品的坚实蓝图
  • 【OpenGL】LearnOpenGL学习笔记26 - 视差贴图 Parallax Map
  • 对1D poisson采用二阶中心差分格式离散,离散 Laplace 矩阵 A 的特征向量就是 Fourier 模式的离散化
  • [Windows] PDF解密程序 PDF Decrypter Pro 4.5.0 汉化版
  • 【OpenGL】openGL 法线贴图
  • 科普:通配符表达式(Wildcard)与正则表达式(Regular Expression)
  • 【ROS2】Beginner: Client libraries - 使用 colcon 构建功能包
  • 记一次投影连接网络存储
  • 计算机视觉(opencv)实战二十九——图像风格迁移