codeHs字符串wave函数问题:空格处理异常致随机测试失败
问题分析与修复方案
你的代码主要有以下几个问题:
- 空格判断的正则表达式不合适:
/^\s*$/是用来匹配整个字符串是否全为空格或空串的,用来判断单个字符虽然能工作,但不够准确且易混淆,换成/\s/.test(str.charAt(i))更直接。 - 空格处理逻辑错误:遇到空格时直接
i += 1并强制处理下一个字符,会导致连续空格时索引越界或生成错误的字符串,同时j的递增逻辑混乱——空格位置不需要生成对应元素,j不应该在此时递增。 - 循环的索引管理混乱:
for循环头里同时递增i和j,没有区分“需要生成元素”和“跳过空格”的场景,导致数组出现空位或错误元素。
修复后的代码
function wave(str) { const result = []; for (let i = 0; i < str.length; i++) { const char = str.charAt(i); // 跳过空格,不生成对应wave字符串 if (/\s/.test(char)) { continue; } // 生成当前字符大写的wave字符串并加入结果数组 result.push(str.slice(0, i) + char.toUpperCase() + str.slice(i + 1)); } return result; }
修复说明
- 直接遍历每个字符索引,遇到空格用
continue跳过,不执行后续生成逻辑。 - 非空格字符时,直接拼接生成对应的大写字符串,用
push添加到结果数组,无需额外管理j索引,避免混乱。 - 用
let替代var,避免变量提升导致的潜在问题(现代JS更推荐)。
这个逻辑能正确处理任意含空格的输入,比如输入"he llo",会生成:
"He llo""hE llo""he Llo""he lLo""he llO"
完全符合需求,不会出现随机测试的异常。
内容的提问来源于stack exchange,提问作者WillBeTheBestInTheFuture
相关产品推荐
相关产品推荐

