You need to enable JavaScript to run this app. JavaScript实现HackerRank重复字符串挑战单个测试用例失败问题求解
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现HackerRank重复字符串挑战单个测试用例失败问题求解

代码错误定位

你的实现中唯一的逻辑bug出现在n能被s长度整除的分支判断里:

if (n % s.length === 0){
    return count * n;
}

此处的count是单个完整s中包含的字母a的数量,当n是s长度的整数倍时,实际拼接的完整s的个数是Math.trunc(n / s.length),正确的计算值应该是单串a的数量乘以完整重复次数,而非直接乘以总长度n。
这个错误刚好会把最终结果放大s.length倍:本次测试用例的s长度恰好是100,所以原本正确的结果51574523448被放大100倍,得到了错误输出5157452344800,和你看到的测试偏差完全吻合。

为什么之前19个测试用例都能通过?
因为这些用例要么触发了n < s.length的提前返回分支,没走到整除判断的错误逻辑;要么s的长度为1,此时count * n的计算结果和正确值刚好相等(因为重复次数等于n本身),所以没有暴露问题。

简化修正后的代码

去掉冗余的分支判断,所有场景统一用「完整重复次数*单串a数 + 剩余截断部分a数」的公式计算,彻底避免分支写错的问题:

function repeatedString(s, n) {
    // 统计单个完整s里的a的数量
    let singleStrACount = 0;
    for (let i = 0; i < s.length; i++) {
        if (s[i] === 'a') singleStrACount++;
    }
    // 计算可完整重复的次数
    const fullRepeat = Math.floor(n / s.length);
    // 计算最后剩余的未完整重复的字符长度
    const extraChars = n % s.length;
    // 统计剩余部分的a的数量
    let extraACount = 0;
    for (let i = 0; i < extraChars; i++) {
        if (s[i] === 'a') extraACount++;
    }
    return singleStrACount * fullRepeat + extraACount;
}
测试用例数值验证
  • 本次测试用例中,s长度为100,单串包含的a的数量为7,总n值为736778906400
  • 完整重复次数为736778906400 / 100 = 7367789064,剩余字符长度为0
  • 总a数为7 * 7367789064 = 51574523448,和预期输出完全一致
  • 原错误代码的计算逻辑为7 * 736778906400 = 5157452344800,刚好和你的实际输出匹配。

内容的提问来源于stack exchange,提问作者Hanzla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 19:54:04