Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaScript双指针技巧:反转字符串中的元音字母_创想鸟

JavaScript双指针技巧:反转字符串中的元音字母

javascript双指针技巧:反转字符串中的元音字母

本文旨在讲解如何使用双指针技巧解决LeetCode上的“反转字符串中的元音字母”问题。我们将深入探讨使用JavaScript实现此算法时需要注意的细节,特别是关于变量赋值和临时变量使用的重要性。通过对比两种不同的交换变量方法,帮助读者理解其背后的原理,从而写出更健壮、更高效的代码。

使用双指针反转元音字母

双指针技巧是一种常用的算法思想,特别适用于处理数组或字符串中的问题。 在“反转字符串中的元音字母”问题中,我们可以使用两个指针,一个从字符串的开头开始,另一个从字符串的末尾开始,然后向中间移动。 当两个指针都指向元音字母时,交换它们。

以下是使用JavaScript实现此算法的示例代码:

function reverseVowels(s) {  let arrS = s.split('');  let vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; // 包含大小写元音  let start = 0;  let end = arrS.length - 1;  while (start < end) {    while (start < end && !vowels.includes(arrS[start])) {      start++;    }    while (start < end && !vowels.includes(arrS[end])) {      end--;    }    if (start < end) {      // 使用临时变量进行交换      let temp = arrS[start];      arrS[start] = arrS[end];      arrS[end] = temp;      start++;      end--;    }  }  return arrS.join('');}

代码解释:

立即学习“Java免费学习笔记(深入)”;

reverseVowels(s) 函数: 接收一个字符串 s 作为输入。arrS = s.split(”): 将字符串转换为字符数组,方便修改。vowels = […]: 定义一个包含所有元音字母(包括大小写)的数组。start = 0; end = arrS.length – 1;: 初始化两个指针,start 指向数组的开头,end 指向数组的末尾。while (start 只要 start 指针小于 end 指针,就继续循环。内部 while 循环: 分别移动 start 和 end 指针,直到找到元音字母。while (start while (start if (start 如果 start 和 end 指针都指向元音字母,则交换它们。使用临时变量 temp 进行交换: 这是关键所在,避免直接赋值导致数据丢失。start++; end–;: 移动 start 和 end 指针,继续寻找下一个需要交换的元音字母对。return arrS.join(”);: 将字符数组转换回字符串并返回。

为什么需要临时变量?

在交换两个变量的值时,使用临时变量至关重要。 考虑以下不使用临时变量的交换方式:

arrS[start] = arrS[end];arrS[end] = arrS[start]; // 此时 arrS[start] 的值已经被修改

这种方式的问题在于,第一行代码会将 arrS[start] 的值覆盖为 arrS[end] 的值。 那么,当执行第二行代码时,arrS[start] 实际上已经是 arrS[end] 的原始值了。 因此,arrS[end] 最终会被赋值为 arrS[end] 的原始值,导致交换失败。

而使用临时变量,我们可以先保存 arrS[start] 的原始值,然后再进行交换:

let temp = arrS[start];arrS[start] = arrS[end];arrS[end] = temp;

这样可以确保交换的正确性。

示例:

假设 arrS = [‘h’, ‘e’, ‘l’, ‘l’, ‘o’],并且 start = 1 (指向 ‘e’),end = 4 (指向 ‘o’)。

不使用临时变量:

arrS[1] = arrS[4]; arrS 变为 [‘h’, ‘o’, ‘l’, ‘l’, ‘o’]arrS[4] = arrS[1]; arrS 变为 [‘h’, ‘o’, ‘l’, ‘l’, ‘o’] (没有发生实际交换)

使用临时变量:

temp = arrS[1]; temp = ‘e’arrS[1] = arrS[4]; arrS 变为 [‘h’, ‘o’, ‘l’, ‘l’, ‘o’]arrS[4] = temp; arrS 变为 [‘h’, ‘o’, ‘l’, ‘l’, ‘e’] (成功交换)

总结

通过本文,我们学习了如何使用双指针技巧解决“反转字符串中的元音字母”问题,并深入理解了在JavaScript中交换变量时使用临时变量的重要性。 在编写算法时,务必注意变量赋值的顺序,避免出现数据覆盖的问题。 掌握这些技巧可以帮助你编写出更健壮、更高效的代码。记住,清晰的逻辑和细致的思考是解决问题的关键。

以上就是JavaScript双指针技巧:反转字符串中的元音字母的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript双指针法反转元音字母:为何临时变量至关重要
上一篇 2025年12月20日 08:03:40
MongoDB:提取指定时间段(10:00 AM – 11:00 AM)内的数据
下一篇 2025年12月20日 08:03:58

相关推荐

  • 抖音播放量是什么意思?抖音播放量如何变现呢

    短视频平台已成为当下最受欢迎的传播媒介之一。作为国内领先的短视频平台,抖音凭借其强大的算法推荐机制和丰富的内容生态,吸引了大量用户。而抖音播放量,作为衡量短视频传播效果的重要指标,也逐渐成为创作者和品牌方关注的重点。本文将深入解析抖音播放量的含义,探讨其背后的逻辑及影响因素,为短视频内容生产者提供有…

    2026年9月22日
    000
  • MySQL备份数据恢复演练_MySQL数据恢复流程与实战

    MySQL备份数据恢复演练_MySQL数据恢复流程与实战MySQL备份数据恢复演练_MySQL数据恢复流程与实战MySQL备份数据恢复演练_MySQL数据恢复流程与实战MySQL备份数据恢复演练_MySQL数据恢复流程与实战

    mysql备份数据恢复演练是为了验证备份有效性并提升dba恢复能力的必要措施。其核心流程包括:1.准备与生产环境相似的演练环境并明确恢复目标;2.检查备份策略并准备所需全量与增量备份文件;3.模拟数据丢失场景并记录故障时间;4.停止mysql服务、清理数据目录后从全量备份恢复;5.依次应用增量备份并…

    2026年9月22日 • 用户投稿
    100
  • Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」

    Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」

    大家好,很高兴再次与大家见面,我是你们的朋友全栈君。 说明:这篇博客是博主亲自编写的,内容独特,辛苦付出,请大家尊重原创,感谢支持! 一.前言VMware Ubuntu安装的详细指南:https://www.php.cn/link/35e7132c1742eaa9dacfedd5607b5f94。 …

    2026年9月22日 • 用户投稿
    900
  • 为什么需要定期更新主板的BIOS,更新过程中断电会导致什么严重后果?

    定期更新BIOS可提升系统稳定性、硬件兼容性、安全性和性能。支持新CPU和内存需更新BIOS;修复启动异常、USB识别等问题;修补Spectre等安全漏洞;优化电源管理与超频能力。但更新中断可能导致BIOS损坏、主板无法开机,需专业修复,因此操作时须确保稳定供电并遵循厂商指引。 定期更新主板的BIO…

    2026年9月22日
    100
  • MySQL自动化备份如何实现_适合企业级部署吗?

    MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?

    mysql的自动化备份对企业级部署是必要的,且可通过多种方式实现。1. 使用mysqldump+定时任务(crontab)是最基础的方式,操作简单适合中小规模数据库,但备份时可能锁表影响业务;2. 增量备份结合二进制日志(binary log)更高效,适用于频繁变更的数据,支持精确恢复到某时间点;3…

    2026年9月21日 • 用户投稿
    100
  • 如何解决Linux软件包冲突 依赖问题处理方案

    如何解决Linux软件包冲突 依赖问题处理方案如何解决Linux软件包冲突 依赖问题处理方案如何解决Linux软件包冲突 依赖问题处理方案如何解决Linux软件包冲突 依赖问题处理方案

    遇到linux系统中软件包冲突或依赖问题时,应首先理解依赖关系并使用合适工具解决。1. 使用apt或yum的自动修复功能,如debian/ubuntu可用sudo apt –fix-broken install,centos/fedora可用sudo dnf install @syste…

    2026年9月21日 • 用户投稿
    800
  • 如何用MidJourney导出高质量AI图片?详细教程教你快速保存图像

    要获取MidJourney高质量图片,必须通过官网下载经Upscale放大后的版本。首先在Discord中选择满意图片并点击“U”按钮进行放大,随后点击“Web”按钮跳转至MidJourney官网,在浏览器中下载未经压缩的高分辨率原图。直接从Discord保存的图片为平台压缩后的预览图,清晰度较低。…

    2026年9月21日
    100
  • 如何设置Linux软件包更新排除 yum exclude和apt-mark hold

    如何设置Linux软件包更新排除 yum exclude和apt-mark hold如何设置Linux软件包更新排除 yum exclude和apt-mark hold如何设置Linux软件包更新排除 yum exclude和apt-mark hold如何设置Linux软件包更新排除 yum exclude和apt-mark hold

    要阻止linux系统中特定软件包更新,可针对不同发行版使用相应方法。对于rhel/centos系系统,可通过在/etc/yum.conf或.repo文件中添加exclude=包名来排除升级;对于debian/ubuntu系系统,则使用sudo apt-mark hold 包名命令锁定版本。这两种方式…

    2026年9月21日 • 用户投稿
    500
  • VSCode怎么更改解码方式_VSCode文件编码修改教程

    VSCode通过设置文件编码解决乱码问题,可手动选择“以不同编码重新打开”或“使用编码保存”,推荐统一使用UTF-8编码并启用files.autoGuessEncoding自动检测,避免编码错误。 VSCode更改解码方式主要通过设置文件编码来实现,以便正确显示文件内容。通常情况下,VSCode会自…

    2026年9月21日
    900
  • 如何在Krita导出AI生成的8K艺术图片?保存超高清图像方法

    答案是优先选择PNG格式导出8K AI艺术作品,确保画布为8K分辨率,嵌入sRGB色彩配置文件,并优化系统内存与硬盘性能以提升Krita处理效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 在Krita中导出AI生成的8K艺术图片,核心…

    2026年9月21日
    200
  • 《如龙 极3》与峰义孝为主角《如龙3外传》等新情报发表

    《如龙 极3》与峰义孝为主角《如龙3外传》等新情报发表《如龙 极3》与峰义孝为主角《如龙3外传》等新情报发表《如龙 极3》与峰义孝为主角《如龙3外传》等新情报发表《如龙 极3》与峰义孝为主角《如龙3外传》等新情报发表

    世嘉公开《如龙极3/如龙3外传  dark ties》官方中文版预告宣传片,将于2026年2月12日发售 ​​​​,登陆ps5/ps4/switch2/xbox/pc平台,全球同步推出。 ​​​ 在2009年于PS3平台发售的《如龙3》焕然重生,为您打造“极致体验”。鲜活真实的冲绳街景、震撼力升级的…

    2026年9月21日 • 用户投稿
    100
  • MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南

    MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南

    mysql原生全文搜索功能存在明显局限,需结合外部搜索引擎才能满足复杂需求。1. mysql全文搜索适用于小数据量、简单查询场景,但分词能力弱,尤其对中文支持差,查询功能有限,无法实现模糊查询、纠错等高级功能,且性能随数据量增长显著下降。2. 外部搜索引擎如elasticsearch(es)和sph…

    2026年9月21日 • 用户投稿
    100
  • 一周学会蝴蝶号无人直播的完整课程计划推荐

    一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐

    掌握“蝴蝶号”无人直播的核心要义,一周内可搭建初步系统并具备独立操作能力。1.第一天厘清概念并完成基础环境搭建;2.第二天熟悉obs基础操作与场景构建;3.第三天准备高质量内容素材并确定风格;4.第四天设置自动化逻辑与推流配置;5.第五天处理互动机制及常见问题;6.第六天进行首次正式直播并复盘;7.…

    2026年9月21日 • 用户投稿
    200
  • VSCode怎么启动Layui项目_VSCode运行Layui前端框架项目教程

    必须使用本地服务器运行Layui项目,因为直接打开HTML文件通过file://协议会受浏览器安全限制,导致AJAX、跨域等功能异常,Layui组件无法正常加载;推荐安装Node.js后使用npm全局安装http-server,通过命令行启动服务,或在VSCode中安装Live Server插件,右…

    2026年9月21日
    200
  • MySQL 大型历史数据表结构设计与优化指南

    本文旨在为处理大量客户历史交易数据的MySQL数据库设计提供专业指导。我们将探讨如何构建高效、可扩展的表结构,重点关注主键设计、数据分区、实时数据摄入以及性能优化策略,以确保系统能够稳定支持百万级乃至亿级数据量的查询需求。 MySQL大型历史数据表结构设计与优化 在处理大量历史数据,特别是涉及到多用…

    2026年9月21日
    000
  • MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录

    MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录

    处理mysql重复数据的核心步骤是识别并清理,可使用group by或窗口函数定位重复项,再通过分批删除或倒腾法安全清理;sublime text可用于高效生成和编辑sql语句。1. 识别重复数据常用group by+having或row_number()窗口函数;2. 清理策略包括分批删除、使用临…

    2026年9月21日 • 用户投稿
    100
  • 如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

    如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

    PyTorch大模型训练需综合运用分布式训练、内存优化与高效计算策略。首先采用DistributedDataParallel实现多GPU并行,配合DistributedSampler确保数据均衡;通过混合精度训练、梯度累积和激活检查点缓解显存压力;使用torch.compile优化模型计算效率;选择…

    2026年9月21日 • 用户投稿
    100
  • Spring Boot异常处理:为何需要自定义异常而非仅依赖HTTP状态码

    在Spring Boot应用中,自定义异常提供了比单一HTTP状态码更丰富的错误上下文,能够更精确地传达问题根源。这种细粒度的异常处理不仅提升了代码的可读性和可维护性,也极大地改善了用户体验,使客户端能够基于具体错误类型做出智能响应,而非仅仅接收到一个模糊的状态码。 为什么需要自定义异常? 在构建r…

    2026年9月21日
    200
  • 百家号视频怎么隐藏?百家号怎么设置仅自己可见

    随着短视频平台的快速发展,其已成为人们获取资讯和休闲娱乐的重要方式。作为国内知名的自媒体平台之一,百家号吸引了大量用户。然而,在享受便捷的同时,隐私安全问题也日益突出。本文将介绍百家号视频隐藏的方法,帮助用户更好地保护个人内容,维护隐私安全。 一、百家号视频隐藏方法 设置隐私权限 在百家号后台,用户…

    2026年9月21日
    200
  • VSCode怎么改环境_VSCode切换Python/Node等多版本环境教程

    切换VSCode环境需先安装对应语言扩展,再通过命令面板选择解释器或使用nvm切换Node版本,配合虚拟环境或launch.json配置确保运行和调试时使用正确版本,可通过终端命令验证环境,若失效可检查缓存、扩展冲突或权限问题。 VSCode改环境,其实就是让VSCode知道你想用哪个版本的Pyth…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信