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

LeetCode1456. 定长子串中元音的最大数目

题目分析

本题要求在给定字符串中找到长度为 k 的子串,使其包含的元音字母(a,e,i,o,u)数量最多。这是一个典型的固定窗口大小的滑动窗口问题

解题思路

  1. 初始化元音数量
    • 先计算字符串前 k 个字符中的元音数量作为初始值
  1. 滑动窗口处理
    • 从第 k 个字符开始向右移动窗口:
      • 加入当前字符:如果是元音,计数加1
      • 移除窗口左侧字符:如果是元音,计数减1
    • 每次移动后更新最大元音数量
  1. 元音判断优化
    • 使用逻辑或判断字符是否为元音(简单高效)

完整代码

public class LeetCode1456 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String s = br.readLine().trim();int k = Integer.parseInt(br.readLine().trim());System.out.println(new Solution().maxVowels(s, k));}static class Solution {public int maxVowels(String s, int k) {// 1. 获取字符串长度(边界条件:k=0的情况由题目约束可忽略)int n = s.length();// 2. 初始化第一个窗口的元音数量String vowels = "aeiou";int vowelCount = 0;for (int i = 0; i < k; i++) {if (vowels.contains(s.charAt(i) + "")) {vowelCount++;}}int maxVowels = vowelCount; // 当前最大元音数// 3. 滑动窗口处理(窗口范围:[i-k, i-1] → [i-k+1, i])for (int i = k; i < n; i++) {// 移除窗口左侧元素(位置:i-k)char leftChar = s.charAt(i - k);if (vowels.contains(leftChar + "")) {vowelCount--;}// 添加窗口右侧元素(位置:i)char rightChar = s.charAt(i);if (vowels.contains(rightChar + "")) {vowelCount++;}// 更新最大值maxVowels = Math.max(maxVowels, vowelCount);}return maxVowels;}}
}

知识点分类

  • 滑动窗口算法
    • 固定窗口大小的经典应用
    • 通过加减操作实现O(n)时间复杂度
  • 字符串处理
    • 字符遍历与条件判断
    • 索引边界处理(避免数组越界)
  • 性能优化
    • 避免重复计算(元音判断函数抽取)
    • 单次遍历完成计算
  • 边界条件处理
    • 自动兼容 k=1 或 k=字符串长度的情况
    • 处理输入长度为1的特殊情况
http://www.dtcms.com/a/266259.html

相关文章:

  • Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用
  • 在数学中一个实对称矩阵的特性分析
  • 每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
  • Web 项目如何自动化测试?
  • 大语言模型预训练数据——数据采样方法介绍以GPT3为例
  • 银河麒麟V10服务器版 + openGuass + JDK +Tomcat
  • 基于FPGA的一维序列三次样条插值算法verilog实现,包含testbench
  • 类图+案例+代码详解:软件设计模式----原型模式
  • 【网络与系统安全】域类实施模型DTE
  • 【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
  • 篇二 OSI七层模型,TCP/IP四层模型,路由器与交换机原理
  • 花尖墨 Web3 水果品牌白皮书
  • 【牛客算法】小苯的数字权值
  • Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
  • 基于Simulink的二关节机器人独立PD控制仿真
  • Java泛型笔记
  • 【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
  • 【阿里巴巴JAVA开发手册】IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用Windows格式。
  • React Native响应式布局实战:告别媒体查询,拥抱跨屏适配新时代
  • 【银行测试】手机银行APP专项项目+测试点汇总(一)
  • D3 面试题100道之(1-20)
  • Java SE线程的创建
  • 医养照护与管理实训室建设方案:培育医养结合领域复合型人才
  • ZKmall模块商城批发电商平台搭建方案,多商户支持 + 订单管理功能全覆盖
  • 基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
  • 如何保障MySQL客户端连接数据库安全更安全
  • Adobe Illustrator设置的颜色和显示的颜色不对应问题
  • Java 中的锁机制详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十) -> 灵活定制编译选项
  • Kotlin 安装使用教程