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

滑动窗口题目:定长子串中元音的最大数目

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:定长子串中元音的最大数目

出处:1456. 定长子串中元音的最大数目

难度

4 级

题目描述

要求

给定字符串 s\texttt{s}s 和整数 k\texttt{k}k,返回字符串 s\texttt{s}s 中长度为 k\texttt{k}k 的子字符串中可能包含的最大元音字母数。

英语中的元音字母‘a’\texttt{`a'}‘a’‘e’\texttt{`e'}‘e’‘i’\texttt{`i'}‘i’‘o’\texttt{`o'}‘o’‘u’\texttt{`u'}‘u’

示例

示例 1:

输入:s="abciiidef",k=3\texttt{s = "abciiidef", k = 3}s = "abciiidef", k = 3
输出:3\texttt{3}3
解释:子字符串 "iii"\texttt{"iii"}"iii" 包含 3\texttt{3}3 个元音字母。

示例 2:

输入:s="aeiou",k=2\texttt{s = "aeiou", k = 2}s = "aeiou", k = 2
输出:2\texttt{2}2
解释:任意长度为 2\texttt{2}2 的子字符串都包含 2\texttt{2}2 个元音字母。

示例 3:

输入:s="leetcode",k=3\texttt{s = "leetcode", k = 3}s = "leetcode", k = 3
输出:2\texttt{2}2
解释:"lee"\texttt{"lee"}"lee""eet"\texttt{"eet"}"eet""ode"\texttt{"ode"}"ode" 都包含 2\texttt{2}2 个元音字母。

数据范围

  • 1≤s.length≤105\texttt{1} \le \texttt{s.length} \le \texttt{10}^\texttt{5}1s.length105
  • s\texttt{s}s 由小写英语字母组成
  • 1≤k≤s.length\texttt{1} \le \texttt{k} \le \texttt{s.length}1ks.length

解法

思路和算法

为了得到字符串 sss 的长度为 kkk 的子字符串中可能包含的最大元音字母数,需要遍历每个长度为 kkk 的子字符串,计算子字符串中的元音字母数。

首先遍历下标范围 [0,k−1][0, k - 1][0,k1] 的子字符串并计算元音字母数。对于 i≥ki \ge kik,当子字符串的下标范围从 [i−k,i−1][i - k, i - 1][ik,i1] 变成 [i−k+1,i][i - k + 1, i][ik+1,i] 时,s[i−k]s[i - k]s[ik] 移出子字符串,s[i]s[i]s[i] 移入子字符串,按照以下两步依次更新子字符串中的元音字母数。

  1. 如果 s[i−k]s[i - k]s[ik] 是元音字母,则子字符串中的元音字母数减 111,否则子字符串中的元音字母数不减 111

  2. 如果 s[i]s[i]s[i] 是元音字母,则子字符串中的元音字母数加 111,否则子字符串中的元音字母数不加 111

遍历结束之后,即可得到每个长度为 kkk 的子字符串中的元音字母数,以及最大元音字母数。

代码

class Solution {public int maxVowels(String s, int k) {int count = 0;int length = s.length();for (int i = 0; i < k; i++) {if (isVowel(s.charAt(i))) {count++;}}int maxCount = count;for (int i = k; i < length; i++) {if (isVowel(s.charAt(i - k))) {count--;}if (isVowel(s.charAt(i))) {count++;}maxCount = Math.max(maxCount, count);}return maxCount;}public boolean isVowel(char c) {return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';}
}

复杂度分析

  • 时间复杂度:O(n)O(n)O(n),其中 nnn 是字符串 sss 的长度。需要遍历字符串一次。

  • 空间复杂度:O(1)O(1)O(1)

http://www.lryc.cn/news/620903.html

相关文章:

  • 【读代码】开源流式语音编码器SecoustiCodec
  • MySQL的索引(索引的创建和设计原则):
  • python自学笔记8 二维和三维可视化
  • 业务敏捷性对SAP驱动型企业意味着什么?如何保持企业敏捷性?
  • 网络通信全过程:sk_buff的关键作用
  • ⭐CVPR2025 3D 高斯探测视觉基础模型3D能力
  • Mybatis学习笔记(五)
  • 3D-R1、Scene-R1、SpaceR论文解读
  • 区块链 + 域名Web3时代域名投资的新风口(上)
  • CTFSHOW | nodejs题解 web334 - web344
  • 一颗TTS语音芯片给产品增加智能语音播报能力
  • 关于RSA和AES加密
  • vue+后端
  • vue3使用leaflet地图
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权(源码下载)
  • 跨域及解决方案
  • python+vue扫盲
  • langchain入门笔记03:使用fastapi部署本地大模型后端接口,优化局域网内的问答响应速度
  • Room 数据存储
  • AI 赋能:从智能编码提速到金融行业革新的实践之路
  • 机器翻译:Hugging Face库详解
  • 【51单片机学习】定时器、串口、LED点阵屏、DS1302实时时钟、蜂鸣器
  • 深入解析Prompt缓存机制:原理、优化与实践经验
  • (第十五期)HTML文本格式化标签详解:让文字更有表现力
  • 若依前后端分离版学习笔记(十)——数据权限
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 在mysql> 下怎么运行 .sql脚本
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目
  • AI引擎重构数据安全:下一代分类分级平台的三大技术跃迁
  • Keep-Alive 的 “爱情故事”:HTTP 如何从 “短命” 变 “长情”?