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

JavaScript字符串解码函数重构:修复测试用例输出错误

编码规则说明

  • 编码示例:ABC → 输出:ZBYX
  • 规则细节:
    • 英文字母表中奇数位的字母,替换为其逆序字母(例如A是第1位,逆序为Z;C是第3位,逆序为X)
    • 英文字母表中偶数位的字母,替换为「自身+逆序字母」的组合(例如B是第2位,替换为BY)

需求与问题

需要实现上述编码的逆向解码逻辑,将编码后的字符串还原为原始输入。现有JavaScript解码函数存在错误,部分测试用例结果不符合预期:

  • 输入JQPLO时,函数输出QJKL,预期输出JKL
  • 输入NMLPK时,函数输出MNOP,预期输出NOP

重构后的解码函数

const alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const reverseAlpha = alpha.split('').reverse().join(''); // 预生成逆序字母表,减少重复计算

function decode(str) {
    let result = "";
    let i = 0;
    const strLen = str.length;

    while (i < strLen) {
        const currentChar = str[i];
        const charPosition = alpha.indexOf(currentChar) + 1; // 字母在原表中的位置(从1开始)
        const isEvenChar = charPosition % 2 === 0;

        if (isEvenChar) {
            // 检查下一个字符是否是奇数位(原始偶数位编码的后缀)
            if (i + 1 < strLen && (alpha.indexOf(str[i+1]) + 1) % 2 !== 0) {
                // 当前是原始偶数位编码的前缀(自身),直接保留
                result += currentChar;
                i += 2; // 跳过后缀的逆序字符
            } else {
                // 当前是原始奇数位的编码(逆序字母),转成原始字符
                result += reverseAlpha[alpha.indexOf(currentChar)];
                i += 1;
            }
        } else {
            // 奇数位字符只能是原始偶数位编码的后缀,直接跳过
            i += 1;
        }
    }

    return result;
}

代码说明

  1. 预生成reverseAlpha逆序字母表,避免重复计算逆序字符,提升执行效率
  2. 用while循环替代for循环,灵活控制索引步进(编码后的字符可能占1位或2位)
  3. 核心逻辑:
    • 编码后的偶数位字母分两种情况处理:
      • 若后续紧跟奇数位字母:属于原始偶数位字符的编码(自身+逆序),直接保留当前字符,索引+2跳过后缀
      • 若单独出现:属于原始奇数位字符的编码(逆序字母),转成原始字符后索引+1
    • 编码后的奇数位字母仅作为原始偶数位编码的后缀,直接跳过

测试验证:

  • 输入JQPLO → 输出JKL(符合预期)
  • 输入NMLPK → 输出NOP(符合预期)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:15:32