Leetcode1839. 所有元音按顺序排布的最长子字符串

1839 所有元音按顺序排布的最长子字符串 题目描述: 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(‘a’ ,‘e’ ,‘i’ ,‘o’ ,‘u’)都必须 至少 出现一次。 这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所有的 ‘e’ 都在 ‘i’ 前面,以此类推) 比方说,字符串 “aeiou” 和 “aaaaaaeiiiioou” 都是 美丽的 ,但是 “uaeio” ,“aeoiu” 和 “aaaeeeooo” 不是美丽的 。 给你一个只包含英文元音字母的字符串 w 阅读详情

Every day a Leetcode

题目来源:1839. 所有元音按顺序排布的最长子字符串

解法1:滑动窗口

要找的是最长美丽子字符串的长度,我们可以用滑动窗口解决。

设窗口内的子字符串为 window,每当 word[right] >= window.back() 时,说明可以按字典序升序排布,我们都可以将 word[right] 添加进 window 的末尾,我们使用一个集合 cnt 存储每次遇到的 word[right],当 cnt.size() = 5时,说明所有 5 个英文元音字母都至少出现了一次,更新长度:max_len = max(max_len, (int)window.size())。

如果遇到了不按字典序升序排布的情况,我们发现窗口必须全部清空,于是有:window = “”,cnt.clear(),同时要改变窗口的左边界 left = right,立即将 word[left] 加入进窗口和集合,重新开始遍历。

代码:

/*
 * @lc app=leetcode.cn id=1839 lang=cpp
 *
 * [1839] 所有元音按顺序排布的最长子字符串
 */

// @lc code=start

// 滑动窗口

class Solution
{
public:
    int longestBeautifulSubstring(string word)
    {
        // 特判
        if (word.size() < 5)
            return 0;
        int n = word.size();
        string window;
        unordered_set<char> cnt;
        int max_len = 0, left = 0, right = 0;
        while (right < n)
        {
            if (window.empty() || word[right] >= window.back())
            {
                window += word[right];
                cnt.insert(word[right]);
                right++;
                if (cnt.size() == 5)
                    max_len = max(max_len, (int)window.size());
            }
            else
            {
                window = "";
                cnt.clear();
                left = right;
                window += word[left];
                cnt.insert(word[left]);
                right++;
            }
        }
        return max_len;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是字符串 word 的长度。

空间复杂度:O(n),其中 n 是字符串 word 的长度。

解法2:一次遍历

由滑动窗口的启发,我们发现只设立几个变量也能达到相同的效果。

代码:

class Solution
{
public:
    int longestBeautifulSubstring(string word)
    {
        // 特判
        if (word.size() < 5)
            return 0;
        int n = word.size();
        int max_len = 0;
        int vowel = 1, cur_len = 1;
        for (int i = 1; i < n; i++)
        {
            if (word[i] >= word[i - 1])
            {
                cur_len++;
                if (word[i] > word[i - 1])
                    vowel++;
            }
            else
            {
                cur_len = 1;
                vowel = 1;
            }
            if (vowel == 5)
                max_len = max(max_len, cur_len);
        }
        return max_len;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是字符串 word 的长度。

空间复杂度:O(1)。

Leetcode:Leetcode问题与解决方案 LeetCode LeetCode算法 # 标题 解决方案 困难 1839年 中等的 1452 中等的 1451 中等的 1450 简单的 1344 中等的 1071 简单的 1047 JavaScript 简单的 1046 最后一块石头的重量 JavaScript 简单的 1038 二叉搜索树到大和树 JavaScript 中等的 1021 删除最外面的括号 JavaScript 简单的 1019 链接列表中的下一个更大节点 JavaScript和JavaScript递归 中等的 1009 以10为底的整数的补码 JavaScript 简单的 1008 从预遍历构造二叉搜索树 JavaScript 中等的 1002 查找常见角色 JavaScript 简单的 989 添加到整数数组形式 JavaScript 简单的 977 排序数组的平方 立即下载

相关推荐

深入CARLA地图底层:OpenDRIVE文件如何影响你的仿真效果与避坑指南

本文深入解析CARLA仿真中OpenDRIVE地图文件的核心作用,揭示其如何影响车道连接、交通规则和导航逻辑。通过实战案例和代码示例,提供五大典型地图问题的诊断与修复方案,帮助开发者优化仿真效果并规避常见陷阱。

weixin_34180452的博客 279

LeetCode1839. 所有元音按顺序排布的最长子字符串

LeetCode 我的思路: 有点像滑动窗口 ( 没注意看题目条件,都是元音,而自己写的任何字符都能判断 ,麻烦了一点 ) 1.单独定义一个元音字符串用于判断。 2.‘a’ 是判断美丽字符串的入口, 先在word中找到 ‘ a ’, 3. 从 ' a '该 下标向后在word中找连续的 元音字母 4.找到美丽字符串和之前的相比,取字符串个数最大值 class Solution { public: int longest...

向未来❀去探索 的博客 579

Python小波变换实战:用PyCWT分析气候数据(附完整代码)

本文详细介绍了如何使用Python中的PyCWT库进行小波变换分析,特别针对气候数据(如NINO3海温异常数据)的多尺度周期性特征提取。通过完整的代码示例,从数据预处理、小波参数配置到结果可视化,逐步指导读者掌握小波变换在气候研究中的实际应用。

weixin_29088655的博客 282

LeetCode——1839. 所有元音按顺序排布的最长子字符串(Longest Substring Of All Vowels in Order)[中等]——分析及代码(Java)

LeetCode——1839. 所有元音按顺序排布的最长子字符串[Longest Substring Of All Vowels in Order][中等]——分析及代码[Java]一、题目二、分析及代码1. 贪心(1)思路(2)代码(3)结果三、其他 一、题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(‘a’ ,‘e’ ,‘i’ ,‘o’ ,‘u’)都必须 至少 出现一次。 这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所

江南土豆的博客 645

主流频率合成技术方案深度解析与选型指南

本文深度解析了主流频率合成技术方案,包括直接模拟合成、直接数字合成(DDS)、锁相环合成(PLL)及混合方案,并提供了选型指南。通过实际案例和性能指标对比,帮助工程师根据相位噪声、杂散抑制和切换速度等关键指标选择最适合的技术方案,适用于通信系统、雷达信号处理和精密仪器仪表等领域。

weixin_30231327的博客 312

华为机考攻略(python)--字符串操作【9题】(第六题leetcode1839所有元音按顺序排布的最长子字符串)

每个人在宇宙中都占有一个特定的时空,在这个时空中,就排斥了其他个体的占位。人生的有限性使智者深深地感悟时间的无情。时间是一张无情的网,它能网罗一切,也能摧毁一切!

用余生去守护的博客 549

LQR控制算法调参指南:如何通过Bryson‘s Rule和Trial-and-Error优化自动驾驶性能?

本文深入探讨了LQR控制算法在自动驾驶系统中的调参策略,从Bryson's Rule的基础应用到工程落地的优化方法。通过动态权重适应、非对角项引入和多目标权衡等技巧,提升车辆轨迹跟踪精度与操控舒适性。文章还介绍了数据驱动的调参流程和典型问题的解决方案,为自动驾驶工程师提供实用指南。

kkk56的博客 1026

LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

文章目录1. 题目2. 解题 1. 题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母('a' ,'e' ,'i' ,'o' ,'u')都必须 至少 出现一次。 这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所有的 ‘e’ 都在 ‘i’ 前面,以此类推) 比方说,字符串 "aeiou" 和 "aaaaaaeiiiioou" 都是 美丽的 ,但是 "uaeio" ,"aeoiu" 和 "aaaeeeooo" 不是美丽的 。 给你

Michael是个半路程序员 884

YOLO26魔改神技:YOLO26引入SimAM(无参注意力):不增加网络参数的3D能量函数提点黑科技

文章摘要 2026年YOLO26模型发布引发边缘计算革命,但特定场景精度不足问题催生注意力机制改进需求。本文聚焦无参数注意力机制SimAM,基于神经科学理论通过3D能量函数直接计算神经元权重,实现零参数量提升模型性能。文章深度解析YOLO26四大创新架构,对比SimAM与传统注意力机制差异,并探讨其在YOLO26中的集成方案。研究显示,SimAM在不增加模型体积前提下显著提升mAP指标,特别适合边缘端部署。全文涵盖架构设计、代码实现、竞品对比、部署方案等维度,为轻量化视觉模型优化提供系统解决方案。

ZDQ58818的博客 274

C#面试题及详细答案120道(61-75)-- 多线程与异步

本文摘要了前后端面试题中关于线程与并发的核心知识点,包括线程与进程的区别(61题)、Thread/ThreadPool/Task的对比(62题)、线程安全实现方法(63题)、lock关键字的原理(64题)、Monitor类的进阶用法(65题)以及死锁的成因与避免(66题)。通过C#代码示例和表格对比,清晰展示了多线程编程的关键概念、应用场景及常见问题解决方案,适合开发者快速掌握面试高频考点。完整内容可访问专栏目录获取更多技术面试题解析。

大剑师兰特的GIS世界 1432

LeetCode #1839 所有元音按顺序排布的最长子字符串

1839. 所有元音按顺序排布的最长子字符串 当一个字符串满足如下条件时,我们称它是美丽的: 所有 5 个英文元音字母('a','e','i','o','u')都必须至少出现一次。 这些元音字母的顺序都必须按照字典序升序排布(也就是说所有的'a'都在'e'前面,所有的'e'都在'i'前面,以此类推) 比方说,字符串"aeiou"和"aaaaaaeiiiioou"都是美丽的,但是"uaeio","aeoiu"和"aaaeeeooo"不是美...

JUST CODE IT 418

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 468

LeetCode刷题之路:1839. 所有元音按顺序排布的最长子字符串

当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(‘a’ ,‘e’ ,‘i’ ,‘o’ ,‘u’)都必须 至少 出现一次。 这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所有的 ‘e’ 都在 ‘i’ 前面,以此类推) 比方说,字符串 “aeiou” 和 “aaaaaaeiiiioou” 都是 美丽的 ,但是 “uaeio” ,“aeoiu” 和 “aaaeeeooo” 不是美丽的 。 给你一个只包含英文元音字母的字符串 word ,请

一个程序猿的修炼之路 558

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

力扣刷题——1839.所有元音按顺序排布的最长子字符串

对于这题,我们不必要判断是否为元音字母,因为我们注意到字符串只含有五个元音字母,所以我们只需要关注这个子字符串是不是递增的,且 5 个英文元音字母(最长子字符串是 "aaaaeiiiiouuu" ,长度为 13。当一个字符串满足如下条件时,我们称它是。如果不存在这样的子字符串,请返回。给你一个只包含英文元音字母的字符串。是字符串中一个连续的字符序列。

hxd030228的博客 205

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode-Python-1839. 所有元音按顺序排布的最长子字符串

当一个字符串满足如下条件时,我们称它是 美丽的: 所有 5 个英文元音字母('a','e','i','o','u')都必须至少出现一次。 这些元音字母的顺序都必须按照 字典序升序排布(也就是说所有的 'a'都在 'e'前面,所有的 'e'都在 'i'前面,以此类推) 比方说,字符串"aeiou" 和"aaaaaaeiiiioou"都是 美丽的,但是"uaeio","aeoiu"和"aaaeeeooo"不是美丽的。 给你一个只包含英文元音字母的字符串word...

Keep Coding 547

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode - 1839 所有元音按顺序排布的最长子字符串

class Solution { public int longestBeautifulSubstring(String word) { int len = word.length(); int left = 0; int[] count = new int[5]; //count[0] -- a的个数 //count[1] -- e的个数 //count[2] -- i的个数 /...

qq_44822951的博客 321

1839. 所有元音按顺序排布的最长子字符串

【代码】1839. 所有元音按顺序排布的最长子字符串。

张紫娃的博客 174

1839 所有元音按顺序排布的最长子字符串(模拟)

1. 问题描述: 当一个字符串满足如下条件时,我们称它是美丽的: 所有 5 个英文元音字母('a','e','i','o','u')都必须至少出现一次。 这些元音字母的顺序都必须按照字典序升序排布(也就是说所有的 'a'都在 'e'前面,所有的 'e'都在 'i'前面,以此类推)比方说,字符串"aeiou" 和"aaaaaaeiiiioou"都是 美丽的,但是"uaeio","aeoiu"和"aaaeeeooo"不是美丽的。给你一个只包含英文元音字母的字符串word...

二哈 439

LeetCode 1839.所有元音按顺序排序的最长子字符串

比方说,字符串 “aeiou” 和 “aaaaaaeiiiioou” 都是 美丽的 ,但是 “uaeio” ,“aeoiu” 和 “aaaeeeooo” 不是美丽的。这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所有的 ‘e’ 都在 ‘i’ 前面,以此类推)所有 5 个英文元音字母(‘a’ ,‘e’ ,‘i’ ,‘o’ ,‘u’)都必须 至少 出现一次。word 只包含字符 ‘a’,‘e’,‘i’,‘o’ 和 ‘u’。输入:word = “a”

tus00000的博客 168

力扣随机一题——所有元音按顺序排序的最长字符串

最近实习有点忙,都没时间刷题了💔。

MogulNemenis的博客 424

五月集训——Day6:1839

文章目录***、题目链接一、题目1、题目描述2、基础框架二、解题报告1、思路分析2、时间复杂度3、代码详解三、写在最后 ***、题目链接         Day6:Leetcod 1839. 所有元音按顺序排布的最长子字符串 一、题目 1、题目描述         当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母('

weixin_43850172的博客 324

五月训练 Day6

文章目录0. Leetcode [1984. 学生分数的最小差值](https://leetcode-cn.com/problems/minimum-difference-between-highest-and-lowest-of-k-scores/)分析与解答1. Leetcode [1876. 长度为三且各字符不同的子字符串](https://leetcode-cn.com/problems/substrings-of-size-three-with-distinct-characters/)分析与解答

leapold_Z的博客 178

leetcode 1839. Longest Substring Of All Vowels in Order

Problem:去掉连续重复的字符,并记录每个连续字符的起始索引的,查找aeiou,用后者索引减去前者索引。索引都是开始的,所以要用ind + 5。

邹九的个人博客 163

五月集训:DAY06【滑动窗口】

1984.学生分数的最小差值 给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。 从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。 返回可能的 最小差值。 输入:nums = [90], k = 1 输出:0 解释:选出 1 名学生的分数,仅有 1 种方法: [90] 最高分和最低分之间的差值是 90 - 90 = 0 可能的最小差值是 0 输入:nums = [9,4,1

weixin_55718404的博客 428

【基础算法训练】——滑动窗口

每日算法,坚持坚持

weixin_52621323的博客 2121
上一篇: Leetcode 第 360 场周赛题解
下一篇: Leetcode1833. 雪糕的最大数量
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值