You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode反转元音字母挑战代码异常:索引匹配逻辑失效求修复

修复反转元音字母代码的触发逻辑问题

你的代码核心问题出在第二个循环的count自增逻辑:每次循环不管i是不是元音索引,count都会加1,导致markedItemsIndex[count]的索引和i完全错位,永远触发不了匹配判断。

举个例子,输入hello时,markedItemsIndex是[1,4],第二个循环i从0到4,count依次是0、1、2、3、4:

  • i=0,count=0 → 0 vs 1 → 不匹配
  • i=1,count=1 → 1 vs 4 → 不匹配
  • i=2及之后,count≥2,markedItemsIndex[count]是undefined,更不可能匹配i

修复方案

直接遍历元音索引数组,跳过不必要的全字符串遍历,同时补全大小写元音的处理(LeetCode题目通常包含大小写),还要记得最后将数组转为字符串返回:

var reverseVowels = function (s) {
  let newString = s.split('');
  let markedItems = [];
  let markedItemsIndex = [];

  // 用Set存储所有元音(包含大小写),判断更高效
  const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
  
  // 收集元音字母和对应索引
  for (let i = 0; i < newString.length; i++) {
    if (vowels.has(newString[i])) {
      markedItemsIndex.push(i);
      markedItems.push(newString[i]);
    }
  }

  // 反转元音数组
  markedItems.reverse();

  // 直接遍历索引数组,替换回原位置
  for (let i = 0; i < markedItemsIndex.length; i++) {
    newString[markedItemsIndex[i]] = markedItems[i];
  }

  return newString.join(''); // 必须转为字符串返回,原代码返回数组不符合要求
};

关键修复点说明

  1. 修正循环逻辑:不再遍历整个字符串,而是直接遍历元音索引数组,精准替换对应位置,彻底避免count错位问题
  2. 补全大小写处理:原代码只识别小写元音,添加大写元音后符合题目通用要求
  3. 移除无用标记:原代码中newString[i] = 'marked'完全多余,直接替换原索引值即可
  4. 返回正确类型:LeetCode要求返回字符串,原代码返回数组,必须用join('')转换

内容的提问来源于stack exchange,提问作者me-an-ape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:38:14