Typescript 编码编年史:字符串的反转元音

typescript 编码编年史:字符串的反转元音

问题陈述:

给定一个字符串 s,仅反转字符串中的所有元音并返回它。

元音是 ‘a’、’e’、’i’、’o’ 和 ‘u’,它们可以以小写和大写形式出现多次。

示例1:

输入:s =“你好”输出:“holle”

示例2:

输入:s = “leetcode”输出:“leotcede”

限制条件:

1 <= s.length <= 3 * 10^5s 由可打印的 ascii 字符组成。

初步思考过程:

为了解决这个问题,我们需要识别字符串中的所有元音,颠倒它们的顺序,然后将它们放回原来的位置。这可以使用两种方法来完成:

蛮力方法:提取元音,反转它们,然后在字符串中替换它们。双指针方法:使用两个指针来反转元音。

基本解决方案:

代码:

function reversevowelsbruteforce(s: string): string {    const vowels = new set(['a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u']);    let vowellist: string[] = [];    // extract vowels from the string    for (let char of s) {        if (vowels.has(char)) {            vowellist.push(char);        }    }    // reverse the list of vowels    vowellist.reverse();    // create a result array to build the output string    let result: string[] = [];    let vowelindex = 0;    // reconstruct the string with reversed vowels    for (let char of s) {        if (vowels.has(char)) {            result.push(vowellist[vowelindex]);            vowelindex++;        } else {            result.push(char);        }    }    return result.join('');}

时间复杂度分析:

时间复杂度: o(n),其中n是字符串的长度。提取元音、反转元音以及重建字符串都需要 o(n) 时间。空间复杂度: o(n),用于存储元音和结果数组。

限制:

暴力解决方案效果很好,但使用额外的空间来存储元音和结果数组。

优化方案:

代码:

function reversevowelsoptimized(s: string): string {    const vowels = new set(['a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u']);    let sarray = s.split('');    let left = 0;    let right = sarray.length - 1;    while (left < right) {        while (left < right && !vowels.has(sarray[left])) {            left++;        }        while (left < right && !vowels.has(sarray[right])) {            right--;        }        if (left < right) {            [sarray[left], sarray[right]] = [sarray[right], sarray[left]];            left++;            right--;        }    }    return sarray.join('');}

时间复杂度分析:

时间复杂度: o(n),其中n是字符串的长度。每个字符最多检查两次。空间复杂度: o(n),用于字符串的数组表示。如果我们不计算输入和输出字符串所使用的空间,则空间复杂度可以认为是 o(1)。

基本解决方案的改进:

优化的解决方案使用两指针方法将元音反转到位,减少对额外空间的需求。

边缘情况和测试:

边缘情况:

该字符串不包含元音。该字符串仅包含元音。该字符串有大写和小写元音。字符串长度达到最小或最大限制。

测试用例:

console.log(reverseVowelsBruteForce("hello")); // "holle"console.log(reverseVowelsBruteForce("leetcode")); // "leotcede"console.log(reverseVowelsBruteForce("aA")); // "Aa"console.log(reverseVowelsBruteForce("")); // ""console.log(reverseVowelsBruteForce("bcdfg")); // "bcdfg"console.log(reverseVowelsOptimized("hello")); // "holle"console.log(reverseVowelsOptimized("leetcode")); // "leotcede"console.log(reverseVowelsOptimized("aA")); // "Aa"console.log(reverseVowelsOptimized("")); // ""console.log(reverseVowelsOptimized("bcdfg")); // "bcdfg"

一般解决问题的策略:

理解问题:仔细阅读问题陈述和约束条件以了解需要什么。识别关键操作: 确定所需的关键操作,例如识别和反转元音。优化可读性: 使用清晰简洁的逻辑,确保代码易于理解。彻底测试: 使用各种情况(包括边缘情况)测试解决方案,以确保正确性。

识别类似问题:

字符串操作:

腾讯云AI代码助手 腾讯云AI代码助手

基于混元代码大模型的AI辅助编码工具

腾讯云AI代码助手 98 查看详情 腾讯云AI代码助手 需要根据具体情况修改字符串的问题示例:颠倒句子中的单词顺序。

双指针技术:

使用两个指针有助于优化解决方案的问题。示例:从排序数组中删除重复项。

基于角色的操作:

根据特定字符或字符集进行操作的问题示例:通过忽略非字母数字字符来检查字符串是否为回文。

结论:

使用强力方法和优化的两指针方法可以有效地解决字符串中元音反转的问题。理解问题并将其分解为可管理的部分至关重要。使用清晰的逻辑并优化可读性可确保解决方案易于遵循。使用各种边缘情况进行测试可确保鲁棒性。识别问题的模式可以帮助将类似的解决方案应用于其他挑战。

通过练习此类问题和策略,您可以提高解决问题的能力,并为各种编码挑战做好更好的准备。

以上就是Typescript 编码编年史:字符串的反转元音的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/473511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
胜利女神新的希望什么时候上线-胜利女神妮姬国服上线时间介绍
上一篇 2025年11月8日 08:29:39
OneDrive如何恢复旧版本文件_OneDrive旧版本文件恢复教程
下一篇 2025年11月8日 08:29:49

相关推荐

  • 10000mAh 手机要来了吗?真我公布 828 真粉节亮点

    8 月 25 日消息,真我手机通过其官方社交媒体平台揭晓了今年“828 真粉节”的主要亮点,宣布将呈现四大重磅内容:挑战全球最大电池手机纪录、首发空调级散热黑科技、真奇喵毛绒限定版首次亮相,以及一款仍未公开的神秘新品。 配图来源 : 真我官方微博 据悉,此次活动定于 8 月 28 日下午 2 点正式…

    2026年9月9日
    000
  • 如何在mysql中使用HAVING筛选分组结果

    HAVING用于筛选分组后的聚合结果,如SELECT customer_id, COUNT() FROM orders GROUP BY customer_id HAVING COUNT() > 3。 在 MySQL 中,HAVING 子句用于对分组后的结果进行筛选,它与 GROUP BY 配…

    2026年9月9日
    300
  • 特斯拉三季度财报公布:营收281亿美元 净利润降37%

    小编注意到,美东时间周三盘后,特斯拉公布了2025年第三季度财报。财报显示,特斯拉季度营收创下新高,总营收达到280.95亿美元,同比增长12%;其中汽车业务收入为212.05亿美元,同比增长6%。本季度自由现金流达39.9亿美元,同比提升46%;经营现金流为62.4亿美元。截至季度末,公司现金及投…

    2026年9月9日
    000
  • 《照片编辑器》修改像素颜色方法

    《照片编辑器》修改像素颜色方法《照片编辑器》修改像素颜色方法《照片编辑器》修改像素颜色方法《照片编辑器》修改像素颜色方法

    如何使用照片编辑器修改像素颜色? 1、进入首页后,点击图库功能,从中选择需要编辑的图片进行导入; 2、在底部工具栏中找到并点击“像素”选项; 3、在图像上点击你希望调整颜色的像素位置; 4、随后可自由选取目标颜色,并通过点击进行涂抹修改,完成后点击右上角的确认按钮(√); 5、确认操作后返回主界面,…

    2026年9月9日 用户投稿
    100
  • 《Fallout》纪念日直播:《Fallout 4》周年版将在11月10日推出

    您好, 在今日的《Fallout》纪念日直播中,Bethesda Game Studios 公布了多款系列作品的重要更新消息。具体内容如下: · 《Fallout 4》周年版将于2025年11月10日正式推出(新增创作功能支持) · 《Fallout 76》“燃烧矿镇”扩展包详情揭晓,定于2025年…

    2026年9月9日
    100
  • mysql安装后怎么存储 mysql存储过程编写入门教程

    mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程

    存储过程是mysql中用于封装sql逻辑的对象,使用它可以提升性能和维护性。其优势包括减少网络传输、提高执行效率及封装业务逻辑。创建存储过程的基本语法为delimiter //create procedure 存储过程名(参数列表)begin sql语句end //delimiter ;例如可创建g…

    2026年9月9日 用户投稿
    100
  • Linux系统如何防止数据泄露_Linux防止数据泄露的安全配置

    严格管理文件权限,使用chmod、chown设置合理访问控制,避免777权限,定期查找其他用户可写文件。2. 启用SELinux或AppArmor强制访问控制,避免长期处于宽容模式,定期审查审计日志优化策略。3. 对敏感数据实施加密,使用LUKS全盘加密、GPG文件加密,并为/tmp等分区设置noe…

    2026年9月9日
    100
  • Swoole服务器的CPU占用率很高怎么办

    首先检查是否存在死循环或过频定时任务,确认协程是否泄漏及日志输出是否过多,再核对worker_num等配置是否合理,通过Coroutine::listCoroutines和SwooleTimer::count监控协程与定时器数量,避免同步阻塞调用,最终结合strace、gdb等工具定位高CPU根源。…

    2026年9月9日
    000
  • 根据 Suppliers_ID 字段进行正确排序:SQL 教程

    本文旨在解决数据库查询中,当`Suppliers_ID`字段为字符串类型,但需要按照其数字部分进行排序时,出现排序混乱的问题。通过提取字段中的数字部分并将其转换为数值类型,我们可以实现期望的排序结果,并探讨更优的数据库表设计方案。 在数据库查询中,我们经常需要对数据进行排序。然而,当排序字段为字符串…

    2026年9月9日
    100
  • VSCode代码片段:快速生成常用代码

    VSCode代码片段是通过触发词快速生成代码模板的功能,支持自定义占位符与变量。以JavaScript为例,可通过命令面板配置javascript.json文件,添加如”logf”生成带日志函数的代码块,${1}${2}为占位符,$0为最终光标位置。推荐创建React组件、E…

    2026年9月9日
    000
  • 一加 Ace 6续航配置公布:搭载7800mAh超大电池与120W超级闪充

    10月24日,一加手机官方揭晓了一加 ace 6的续航配置亮点。新机将搭载容量高达7800mah的超大冰川电池,为同级别产品中最大电池容量,同时支持120w超级闪充技术,充电速度亦属同档最快水平。这一“超长续航+极速快充”的组合一经公布,迅速引发市场热议,也让即将于10月27日正式发布的一加 ace…

    2026年9月9日
    000
  • UC浏览器字体渲染异常怎么办 UC浏览器字体显示问题修复方法

    清除UC浏览器缓存和Cookie可解决因数据损坏导致的字体模糊或错乱;2. 检查手机系统字体设置,切换回默认字体以修复渲染异常;3. 更新或重装官方最新版UC浏览器,避免兼容性问题;4. 关闭硬件加速或GPU渲染选项,改善特定机型的排版错位;5. 排除网络环境干扰,保持系统更新以减少故障发生。多数问…

    2026年9月9日
    100
  • Microsoft Teams如何创建反馈表 Microsoft Teams绩效评估的收集工具

    在Microsoft Teams中创建反馈表需先登录平台并进入团队频道,点击“+”添加Forms应用,创建表单并设置标题与问题类型,配置逻辑跳转和必填项后发布;优化设计时应使用简洁语言、合理评分制及匿名选项,并预览确保兼容性;还可通过集成Planner、Power Automate提升效率,导出数据…

    2026年9月9日
    000
  • 自媒体如何打造爆款内容_打造自媒体爆款内容的实用步骤

    明确目标受众、挖掘热门选题、优化标题封面、提升信息密度、引导互动裂变是打造爆款内容的关键步骤。 如果您希望在自媒体平台上获得更高的曝光和互动,但内容始终难以突破流量瓶颈,可能是内容策划与传播策略需要优化。以下是打造爆款内容的具体步骤: 本文运行环境:MacBook Pro,macOS Sonoma …

    2026年9月9日
    100
  • REDMI K90同尺寸电池最大、充电最快 非常扛打

    10月23日,redmi k90正式亮相,搭载了8毫米超薄机身与7100毫安时金沙江大容量电池的组合,被誉为中尺寸机型中的顶级之作。 REDMI产品负责人胡馨心指出,虽然7100毫安时的电池在旗舰机中并非最大,但真正的亮点在于机身尺寸的平衡。 同级别产品为容纳更大电池多采用6.8英寸以上的大屏幕设计…

    2026年9月9日
    000
  • VSCode前端:Sass/SCSS开发配置

    安装Sass相关插件并配置Live Sass Compiler,可实现SCSS实时编译与浏览器自动刷新。1. 安装Sass、Live Sass Compiler、SCSS IntelliSense和Path Intellisense插件;2. 在settings.json中设置输出格式、保存路径及排…

    2026年9月9日
    200
  • Linux文件系统CIFS挂载示例

    首先安装cifs-utils工具,创建挂载点目录,使用mount命令挂载CIFS共享,并在/etc/fstab中配置自动挂载,推荐用credentials文件保存凭据以提高安全性,注意设置正确的认证方式、字符集和权限参数。 在Linux系统中,CIFS(Common Internet File Sy…

    2026年9月9日
    700
  • 《使命召唤22:黑色行动7》新真人预告引争议:这些家伙都是谁啊?

    《使命召唤22:黑色行动7》新真人预告引争议:这些家伙都是谁啊?《使命召唤22:黑色行动7》新真人预告引争议:这些家伙都是谁啊?《使命召唤22:黑色行动7》新真人预告引争议:这些家伙都是谁啊?《使命召唤22:黑色行动7》新真人预告引争议:这些家伙都是谁啊?

    由treyarch与raven software携手打造的《使命召唤22:黑色行动7》即将于今年11月14日全球上线。近日,官方发布了一支名为“替代者”的真人先导预告片,邀请了网络红人杰克·保罗、知名演员泰瑞·克鲁斯等多位人物亮相,甚至片中还出现了一只猴子,引发广泛关注,一起来看看视频内容。 视频欣…

    2026年9月9日 用户投稿
    000
  • win11在双屏显示模式下主副屏设置混乱怎么办_Win11双屏显示主副屏设置修复方法

    首先手动调整显示器排列并设为主屏,再更新显卡驱动,接着关闭PCI Express电源管理,最后通过显卡控制面板保存配置以固化双屏设置。 如果您在使用Windows 11双屏显示时发现主副屏设置混乱,导致窗口错位、任务栏异常或显示器编号错误,这通常是因为系统未能正确识别显示器的物理布局或配置信息丢失。…

    2026年9月9日
    000
  • 小可搜搜App如何协作共享结果 小可搜搜App的团队协作功能

    可通过分享链接、导出文件或创建共享账号解决小可搜搜App无法协作的问题:一、点击分享按钮复制链接或通过第三方应用发送,实现结果快速传递;二、选择PDF、图片或文本格式导出文件,便于跨平台编辑与存档;三、注册团队共用账号并统一登录,确保成员均可访问和编辑历史内容。 如果您在使用小可搜搜App时需要与团…

    2026年9月9日
    000

发表回复

登录后才能评论
关注微信