JavaScript字符串压缩函数输出与预期不符错误排查
问题排查及修复方案
现有代码的核心问题
- 缺少计数为1的过滤逻辑:需求示例中单次出现的字符
b不需要输出后缀数字,你的代码无论计数多少都直接拼接数字,导致会出现多余的1。 - 空输入处理不规范:当前空字符串输入会返回
undefined,按照函数返回字符串的要求应该返回空字符串。
补充说明:你提到运行代码得到
a1b1c1,和你贴出的代码实际运行结果不符,贴出的代码输入aabcc会输出a2b1c2。如果你确实得到a1b1c1,大概率是你实际运行的代码里把count++写在了if (message[n] != message[n+1])的分支内部,而不是循环的第一行,导致每次只有字符变化时才累加计数,计数始终为1。
修正后可正常运行的代码
function compressedString(message) { if (message.length === 0) { return ''; } var result = ""; var count = 0; for (var n = 0; n < message.length; n++) { count++; if (message[n] != message[n+1]) { // 只有计数大于1时才拼接数字 result += message[n] + (count > 1 ? count : ''); count = 0; } } return result; } console.log(compressedString('aabcc')); // 输出 a2bc2,完全符合预期
内容的提问来源于stack exchange,提问作者mufcod
相关产品推荐
相关产品推荐

