【Leetcode刷题记录】1456. 定长子串中元音的最大数目---定长滑动窗口即解题思路总结

news2025/3/11 0:06:32

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

给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(a, e, i, o, u)。

这道题的暴力求解的思路是通过遍历字符串 s 的每一个长度为 k 的子串,逐个计算每个子串中元音字母的数量,并记录过程中遇到的最大元音数量。暴力求解法要用到双重循环,时间复杂度是 O ( k ∗ n ) O(k*n) O(kn)

bool isVowel(char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

int maxVowels(string s, int k) {
    int max_vowels = 0;
    // 遍历字符串s的每一个长度为k的子串
    for (size_t i = 0; i <= s.length() - k; ++i) {
        int count = 0;
        // 计算当前子串中的元音字母数量
        for (size_t j = i; j < i + k; ++j) {
            if (isVowel(s[j])) {
                ++count;
            }
        }
        // 更新最大元音字母数
        max_vowels = max(max_vowels, count);
    }
    return max_vowels;
}

对于字符串s中的任意一个长度为k的子串substr,假设结束位置是f,用 v s ( f ) v_s(f) vs(f)表示这个子串所包含的元音字母的个数,那么下一个长度相同子串所包含的元音字母个数 v s ( f + 1 ) = v s ( f ) + ( s [ f + 1 ] 是元音字母 ) − ( s [ f − k + 1 ] 是元音字母 ) v_s(f+1)=v_s(f)+(s[f+1]是元音字母)-(s[f-k+1]是元音字母) vs(f+1)=vs(f)+(s[f+1]是元音字母)(s[fk+1]是元音字母),这个求解过程就相当于维护了一个长度为k的窗口,从数组的开始部分一直移动到数组的结束部分,这个过程如图所示:

在这里插入图片描述

bool isVowel(char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

int maxVowels(string s, int k) {
    int max_vowels = 0, current_vowels = 0;
    // 初始化窗口,计算第一个窗口内的元音数量
    for (int i = 0; i < k; ++i) {
        if (isVowel(s[i])) {
            ++current_vowels;
        }
    }
    max_vowels = current_vowels;
    // 开始滑动窗口
    for (size_t i = k; i < s.length(); ++i) {
        // 如果离开窗口的字符是元音,则减少计数
        if (isVowel(s[i - k])) {
            --current_vowels;
        }
        // 如果进入窗口的字符是元音,则增加计数
        if (isVowel(s[i])) {
            ++current_vowels;
        }
        // 更新最大元音数
        max_vowels = max(max_vowels, current_vowels);
    }

    return max_vowels;
}

定长滑动窗口解题思路总结

  1. 初始化窗口
    • 确定窗口的大小k,即子数组或子串的长度。
    • 计算第一个窗口(从索引0开始到索引k-1)的目标值(例如,在这个问题中是计算元音的数量)。这一步为后续的窗口移动提供了一个初始状态。
  2. 设定初始状态
    • 根据第一步的结果更新最优解的状态变量(如最大值、最小值等)。在这个例子中,就是记录下当前遇到的最大元音数量。
  3. 滑动窗口
    • 从数组或字符串的第k个元素开始,依次向右移动窗口。每次移动时,执行以下操作:
      • 移出元素:检查即将离开窗口左侧的元素是否满足特定条件(在这个问题中,判断它是否为元音),并相应地调整当前窗口内的计数器。
      • 加入元素:检查新进入窗口右侧的元素是否满足特定条件,并相应地调整当前窗口内的计数器。
      • 更新解:根据当前窗口内的目标值(如元音数量),决定是否更新最优解。
  4. 返回结果
    • 当遍历完整个数组或字符串后,返回记录下来的最优解作为最终结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2293425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

upload-labs安装与配置

前言 作者进行upload-labs靶场练习时&#xff0c;在环境上出了很多问题&#xff0c;吃了很多苦头&#xff0c;甚至改了很多配置也没有成功。 upload-labs很多操作都是旧时代的产物了&#xff0c;配置普遍都比较老&#xff0c;比如PHP版本用5.2.17&#xff08;还有中间件等&am…

从Transformer到世界模型:AGI核心架构演进

文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破三、构建世界模型的技术路径3.1 …

每日一博 - 三高系统架构设计:高性能、高并发、高可用性解析

文章目录 引言一、高性能篇1.1 高性能的核心意义1.2 影响系统性能的因素1.3 高性能优化方法论1.3.1 读优化&#xff1a;缓存与数据库的结合1.3.2 写优化&#xff1a;异步化处理 1.4 高性能优化实践1.4.1 本地缓存 vs 分布式缓存1.4.2 数据库优化 二、高并发篇2.1 高并发的核心意…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

【C++】线程池实现

目录 一、线程池简介线程池的核心组件实现步骤 二、C11实现线程池源码 三、线程池源码解析1. 成员变量2. 构造函数2.1 线程初始化2.2 工作线程逻辑 3. 任务提交(enqueue方法)3.1 方法签名3.2 任务封装3.3 任务入队 4. 析构函数4.1 停机控制 5. 关键技术点解析5.1 完美转发实现5…

数据结构实战之线性表(三)

目录 1.顺序表释放 2.顺序表增加空间 3.合并顺序表 4.线性表之链表实现 1.项目结构以及初始代码 2.初始化链表(不带头结点) 3.链表尾部插入数据并显示 4.链表头部插入数据 5.初始化链表&#xff08;带头结点&#xff09; 6.带头结点的链表头部插入数据并显示 7.带头结…

【python】python基于机器学习与数据分析的手机特性关联与分类预测(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的手机特性关联与分类…

ZOJ 1007 Numerical Summation of a Series

原题目链接 生成该系列值的表格 对于x 的 2001 个值&#xff0c;x 0.000、0.001、0.002、…、2.000。表中的所有条目的绝对误差必须小于 0.5e-12&#xff08;精度为 12 位&#xff09;。此问题基于 Hamming (1962) 的一个问题&#xff0c;当时的大型机按今天的微型计算机标准来…

全面解析文件上传下载删除漏洞:风险与应对

在数字化转型的时代&#xff0c;文件上传、下载与删除功能已经成为各类应用程序的标准配置&#xff0c;从日常办公使用的协同平台&#xff0c;到云端存储服务&#xff0c;再到社交网络应用&#xff0c;这些功能在给用户带来便捷体验、显著提升工作效率的同时&#xff0c;也隐藏…

【C语言深入探索】结构体详解(二):使用场景

目录 一、复杂数据的表示 二、数据的封装 三、多态的模拟 四、回调函数的实现 五、多线程编程 六、通信协议的实现和文件操作 6.1. 使用结构体实现简单通信协议 6.2. 使用结构体进行文件操作 七、图形界面编程 结构体在C语言中具有广泛的应用场景&#xff0c;以下是一…

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…

RK3566-移植5.10内核Ubuntu22.04

说明 记录了本人使用泰山派&#xff08;RK3566&#xff09;作为平台并且成功移植5.10.160版本kernel和ubuntu22.04&#xff0c;并且成功配置&连接网络的完整过程。 本文章所用ubuntu下载地址&#xff1a;ubuntu-cdimage-ubuntu-base-releases-22.04-release安装包下载_开源…

从零开始实现一个双向循环链表:C语言实战

文章目录 1链表的再次介绍2为什么选择双向循环链表&#xff1f;3代码实现&#xff1a;从初始化到销毁1. 定义链表节点2. 初始化链表3. 插入和删除节点4. 链表的其他操作5. 打印链表和判断链表是否为空6. 销毁链表 4测试代码5链表种类介绍6链表与顺序表的区别7存储金字塔L0: 寄存…

51单片机 06 定时器

51 单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成。 作用&#xff1a;1、用于计时&#xff1b;2、替代长时间的Delay&#xff0c;提高CPU 运行效率和处理速度。 定时器个数&#xff1a;3个&#xff08;T0、T1、T2&#xff09;&#xf…

【C++】P1957 口算练习题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a; &#x1f4af;我的做法代码实现&#xff1a; &#x1f4af;老师的做法代码实现&#xff1a; &#x1f4af;对比分析&am…

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下&#xff0c;热源 &#xff08;q&#xff09; 不是通…

CCF-GESP 等级考试 2023年12月认证C++八级真题解析

2023年12月真题 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 正确答案&#xff1a;C 考察知识点&#xff1a;数学问题 解析&#xff1a;本题可抽象为分类计数问题&#xff0c;应使用加法原理&#xff0c;而不是乘法原理。答案为 ACB 的方案数 2 加上 ADB 的…

vscode搭建git

vscode搭建git 一、安装git二、vscode上搭建git(1) 先创建本地仓库再上传到远程仓库&#xff0c;远程仓库名是根据本地仓库名一致(2) 先创建远程仓库&#xff0c;再将本地仓库上传到指定远程仓库 一、安装git 网络教程很多&#xff0c;在此就不赘述了 参考&#xff1a;git安装…

解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题

mac安装软件时&#xff0c;如果出现这个问题&#xff0c;其实很简单 首先打开终端&#xff0c;输入下面的命令 sudo xattr -r -d com.apple.quarantine 输入完成后&#xff0c;先不要回车&#xff0c;点击访达--应用程序--找到你无法打开的app图标&#xff0c;拖到终端窗口中…

ChatGPT-4o和ChatGPT-4o mini的差异点

在人工智能领域&#xff0c;OpenAI再次引领创新潮流&#xff0c;近日正式发布了其最新模型——ChatGPT-4o及其经济实惠的小型版本ChatGPT-4o Mini。这两款模型虽同属于ChatGPT系列&#xff0c;但在性能、应用场景及成本上展现出显著的差异。本文将通过图文并茂的方式&#xff0…