2063. 所有子字符串中的元音

news/2025/10/23 11:02:30/文章来源:https://www.cnblogs.com/cute/p/19160008

2063. 所有子字符串中的元音

https://leetcode.cn/problems/vowels-of-all-substrings/description/

题目:

给你一个字符串 word ,返回 word 的所有子字符串中 元音的总数 ,元音是指 'a'、'e'、'i'、'o' 和 'u' 。

子字符串 是字符串中一个连续(非空)的字符序列。

注意:由于对 word 长度的限制比较宽松,答案可能超过有符号 32 位整数的范围。计算时需当心。1 <= word.length <= 105
word 由小写英文字母组成

思路1(贡献法)

考虑每个元音字母的贡献。

把字符串长度记作 \(n\) ,考虑字符串中位置 \(i\) (0-based)上的字符 word[i]
如果 word[i] 是元音字母(a,e,i,o,u),那么它出现在多少个子字符串中?

任何包含位置 \(i\) 的子字符串,左端点可以选在 \([0, i]\) 中的任意位置(共 \(i+1\) 种),右端点可以选在 \([i, n-1]\) 中的任意位置(共 \(n-i\) 种)。因此包含这个字符的子字符串一共有

\[(i+1)\times(n-i) \]

种。于是只要把所有元音位置的这个值累加起来就是答案。

时间复杂度 \(O(n)\) ,只需一次线性遍历;空间复杂度 \(O(1)\) 。注意答案可能很大,使用 64 位整型 long long 存储。

例子验证

字符串 "aba"\(n=3\)

  • i=0,'a'\((0+1)*(3-0)=1*3=3\)
  • i=1,'b':不是元音,跳过
  • i=2,'a'\((2+1)*(3-2)=3*1=3\)
    总和 = 6,与你枚举的所有子字符串里的元音总数一致。

C++(OI 风格,详细注释)

#include <bits/stdc++.h>
using namespace std;/** 题目:所有子字符串中的元音* 思路:对每个位置 i,如果是元音,则其贡献为 (i+1)*(n-i)。* 注意:使用 long long 存储答案,防止溢出。** 代码风格:OI 风格,简洁、高效,注释详细。*/inline bool isVowel(char c) {// 只处理小写字母 —— 题目保证输入是小写return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string word;if (!(cin >> word)) return 0; // 读取输入字符串long long ans = 0;long long n = (long long)word.size(); // 转为 long long 以便后续乘法安全for (long long i = 0; i < n; ++i) {if (isVowel(word[(size_t)i])) {// 位置 i 的贡献为 (i+1) * (n-i)// 都用 long long 计算,避免中间溢出ans += (i + 1) * (n - i);}}cout << ans << '\n';return 0;
}

类似的「每个位置贡献法」可以解决很多子串/区间计数的问题

解法二(DP )

把所有以位置 \(i\)右端点的子字符串看成一组,记 \(dp[i]\) 为“所有以 \(i\) 为右端点的子字符串中,元音的总数”。
考虑从 \(i-1\) 扩展到 \(i\)

  • 新加入的右端为 \(i\) 的子字符串有 \(i+1\) 个(左端可选 0..i)。
  • 对于每个左端 \(k\)\(0\le k\le i\) ),子串 \(s[k..i]\) 的元音数 = 子串 \(s[k..i-1]\) 的元音数 + (若 \(s[i]\) 是元音则 +1 否则 +0)。
  • 把所有左端加起来,得到:

\[dp[i] = dp[i-1] + (i+1) \times [s[i]\text{ 是元音}] \]

(其中 \([s[i]\text{ 是元音}]\) 为 1 或 0)

题目要的就是 所有子字符串中元音的总数,这正好是对每个右端点的贡献求和:

\[\text{ans}=\sum_{i=0}^{n-1} dp[i] \]

这个 DP 与我们之前每个位置直接计算 \((i+1)(n-i)\) 的方法等价,但 DP 思路更容易迁移到类似题型。时间复杂度 \(O(n)\) ,可以把空间压到 \(O(1)\)

举例(快速验证)

字符串 "aba"

  • \(i=0\) :dp0 = 0 + 1*1 = 1
  • \(i=1\) :dp1 = dp0 + 2*0 = 1
  • \(i=2\) :dp2 = dp1 + 3*1 = 4
    ans = 1+1+4 = 6,正确。

C++(OI 风格,详注)

#include <bits/stdc++.h>
using namespace std;/** DP 版解法:* dp[i] 表示所有以 i 为右端点的子串中,元音的总数。* 递推: dp[i] = dp[i-1] + (i+1) * isVowel(s[i])* 最终答案为 sum(dp[i]) (i 从 0 到 n-1)。** 时间:O(n),空间:O(1)(只保存当前 dp 和累加和)*/inline bool isVowel(char c) {// 题目保证小写字母,这里只判断小写元音return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;if (!(cin >> s)) return 0;long long n = (long long)s.size();long long dp_prev = 0;    // dp[i-1]long long ans = 0;        // 最终答案:sum(dp[i])for (long long i = 0; i < n; ++i) {// 如果 s[i] 是元音,则它对所有以 i 为右端点的子串贡献 (i+1)long long contrib = isVowel(s[(size_t)i]) ? (i + 1) : 0;long long dp_i = dp_prev + contrib; // dp[i]ans += dp_i;                         // 累加到答案里dp_prev = dp_i;                      // 更新用于下一轮}cout << ans << '\n';return 0;
}

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

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

相关文章

扩展域并查集

听起来玄乎,其实比较朴素的东西。 扩展域并查集是用来处理染色判定问题的一种工具。具体来说,对于一些问题,我们可能需要将一个图划分为一些不交的点集,然后保证这些点集内部的点之间没有互相连边。 一个典型的例子…

2025年10月留香沐浴露对比榜:蓝蕨等五款留香力实测

入秋以后,浴室里那瓶“洗完就散”的沐浴露开始让人焦虑:早上出门香香的,地铁里一挤就只剩汗味;健身后冲个澡,晚上约会却不敢抬手;更尴尬的是,同事一句“你用的什么香水”把气氛推向社死——其实只是想找一款真正…

2025年10月留香沐浴露推荐:五强口碑榜对比评测

入秋以后,洗澡不再只是冲凉,更多人开始把沐浴露当成“隐形香水”:下班健身完不想带汗味去见朋友,出差住酒店希望枕头上留一点好闻的气息,情侣约会时期待靠近时散发自然体香。小红书“留香沐浴露”关键词近30天搜索…

已经设置过 settings.json,但是运行 claude 时,依旧提示 Missing API key Run /login

Windows下,需要使用智谱的 API来利用 Claude Code,在 %userprofile%\.claude\settings.json 中设置了智谱的 api_key 和 base_url。 {"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthrop…

2025年10月浦东装修公司推荐榜:五强排名深度评测 2025年10月浦东装修公司榜:五强对比与选择指南

把钥匙交到装修公司手里之前,大多数浦东业主都会经历“选择焦虑”:一边担心预算超支,一边又怕施工质量不过关;既想尽快入住,又害怕后期增项不断。浦东作为上海住宅密度最高、新旧小区交叠的区域,二次翻新与精装房…

2025 年国内挤塑板厂家最新推荐排行榜:聚焦优质企业,助力建筑保温材料精准选购聚苯乙烯/聚乙烯/广东/优质/高密度挤塑板厂家推荐

引言 随着建筑行业对节能降耗要求的不断提升,挤塑板作为关键保温隔热材料,市场需求持续攀升。但当前市场中品牌繁杂,部分产品存在保温性能差、环保不达标、抗压强度不足等问题,不仅影响建筑质量,还可能增加后期维…

一体化预制泵站厂家口碑榜:技术参数与市场表现深度解析

根据《2025年中国环保设备行业调研报告》显示,一体化预制泵站市场规模同比增长22.5%,其中抗腐蚀性能、系统集成度与智能控制水平成为核心评价指标。本文基于产品合格率、专利技术数量及重大项目案例覆盖率等维度,对…

欧拉图笔记

学习资料 :《欧拉图相关的生成与计算问题探究》--陈通欧拉回路:经过每条边恰一次的回路 欧拉路径:经过每条边恰一次的路径 定理 :所有顶点的度数都为偶数的联通无向图,可以构成欧拉回路 定理 :若有两个奇顶点,其…

2025 年真空泵维修厂家最新推荐榜:覆盖宁波杭州金华绍兴等城市优质厂家,全方位解析核心竞争力助企业精准选型

引言 在工业生产中,真空泵作为电子、半导体、制药等关键行业的核心设备,其运行稳定性直接决定生产效率与产品质量。随着设备使用时长增加,漏油、真空度不足、油积碳变质等故障频发,部分维修公司因技术不足判定设备…

2025年10月抗老面霜推荐榜:五款口碑单品深度对比评测

入秋后,昼夜温差拉大,办公室空调依旧强劲,很多25岁以上的精致妈妈、新锐白领和Z世代发现:熬夜加班、带娃早起、通勤暴晒让“垮脸、暗沉、干纹”来得比往年更早。抗老面霜搜索量因此环比上升42%,电商后台数据显示“…

北京房产纠纷律师服务口碑榜:专业能力与胜诉案例深度评估

随着北京房地产市场持续发展,房产纠纷案件数量呈上升趋势。据2024年司法大数据显示,北京地区房产纠纷案件年增长率达12.5%,其中商品房买卖纠纷占比35%,遗产继承涉及房产纠纷占比28%,拆迁补偿纠纷占比20%。本文基于…

《汽车行业Data+AI数智化转型白皮书》重磅发布!驱动车企智造升级

在10月21日举行的秋季发布会上,行业领先的大数据与人工智能应用服务商袋鼠云重磅发布《汽车行业Data+AI数智化转型白皮书》。这是一份聚焦汽车产业系统性重构的研究成果,旨在为中国汽车企业在智能化浪潮中实现从“数…

2025年10月汽车衡厂家推荐排行榜:重庆赛宁特全维度评测

引言与现状分析 对于每天要过磅几十甚至上百辆货车的企业而言,汽车衡一旦故障就意味着排队、罚款、客户投诉。2025年钢铁、水泥、矿山、港口四大行业复产率已回升至92%,地磅日均过磅车次同比增加18%,但行业调研显示…

【高录用、见刊快】2025年教育技术与管理信息系统国际学术会议(ETMIS 2025)

【高录用|稳检索】 2025年教育技术与管理信息系统国际学术会议(ETMIS 2025) 2025 International Conference on Educational Technology and Management Information Systems 在这里看会议官网详情 大会时间:2025年…

2025 年真空泵厂家最新推荐排行榜:聚焦技术实力与服务水平,精选优质企业助您精准选型

引言 当前工业领域中,真空泵作为电子、半导体、制药等关键行业的核心设备,其性能与服务保障直接关系企业生产效率与成本控制。但随着市场规模扩大,厂家数量激增,部分企业存在技术不过关、服务体系不完善等问题,导…

Linux系统-应用问题全面剖析Ⅰ:德承工控机DI-1200在Ubuntu操作系统下[开机黑屏]的解决方法 - Johnny

Linux作为开源操作系统的代表,凭借其稳定性、安全性和灵活性,已成为服务器、云计算、嵌入式系统等领域的首选操作系统。然而在实际应用中,Linux系统仍会面临各种问题,如服务中断、数据丢失、系统崩溃等,这些问题不…

2025年10月美白精华产品评测:水光透白与温和修护多维排行

入秋以后,紫外线强度虽有所下降,但夏季累积的黑色素仍在持续上浮,加上空调房干燥、作息紊乱带来的糖化暗黄,不少用户会在十月把“提亮肤色、均匀肤质”提上护肤日程。社交平台高频提问集中在:美白精华会不会刺激、…

半导体静态参数测试仪系统设备STD2000X在半导体领域和制造领域的详细应用 - FORCREAT

半导体静态参数测试仪系统设备STD2000X能测很多电子元器件静态参数以及IV曲线扫描 如 Si, SiC, GaN 材料的 IGBTs,Diodes,MOSFETs,HEMT,BJTs,SCRs,光耦,继电器,稳压器...... 可以外接夹具、工装、探针台、分选…

权威调研榜单:硅溶胶精密铸造生产厂家厂家TOP3榜单好评深度解析

在高端装备制造领域,硅溶胶精密铸造工艺凭借其0.15mm的尺寸精度和Ra1.6μm的表面光洁度,成为航空航天、医疗器械等行业的核心工艺。根据2025年行业调研数据,国内硅溶胶精密铸造市场规模同比增长18.7%,其中航空航天…

CRMEB标准版订单价格修改的业务逻辑

待支付订单,可以对订单进行改价编辑 订单—>订单管理—>编辑用户生成订单,未支付状态下,可修改实际支付金额和完成该订单赠送的积分数量 Git仓库:https://gitee.com/ZhongBangKeJi/CRMEB