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

凯撒密码变体解密问题:如何移除字符串中的随机插入字符

解决凯撒密码变体解密时移除随机插入字符的问题

你的代码存在几个关键问题,导致无法正确移除随机插入的字符:

  1. 字符串替换逻辑错误:decryptedMessage.replace(decryptedMessage[i],"")会替换整个字符串中所有匹配该字符的内容,而非仅移除当前索引处的随机字符,这会误删原消息中的有效字符。
  2. 循环拼接逻辑错误:每次循环都向结果字符串追加内容,触发i%2===0时,你追加的是替换后的整个字符串,导致最终结果重复拼接多次原字符串,这就是输出异常冗长的原因。
  3. 插入位置判断错误:根据加密规则(每2个字符后插入一个随机字母),随机字符的位置是加密字符串中每3个字符的第3个(索引为2、5、8...),而非偶数索引。

正确的移除随机字符函数

// 注意:原变量定义需要添加引号
let decryptedMessage = "seoekx tbhea mtidrniughkt";

function finalMessage(encryptedStr) {
    let result = "";
    for (let i = 0; i < encryptedStr.length; i++) {
        // 跳过每3个字符中的第3个(即插入的随机字符)
        if (i % 3 !== 2) {
            result += encryptedStr[i];
        }
    }
    return result;
}

const finalMessageResult = finalMessage(decryptedMessage);
console.log(`The final decrypted message is ${finalMessageResult}`);

另一种更直观的实现方式(按3字符分组取前2个)

function finalMessage(encryptedStr) {
    let result = "";
    // 每3个字符为一组,每次取前2个有效字符
    for (let i = 0; i < encryptedStr.length; i += 3) {
        result += encryptedStr[i];
        // 处理字符串长度不是3的倍数的情况(最后一组可能不足3个字符)
        if (i + 1 < encryptedStr.length) {
            result += encryptedStr[i + 1];
        }
    }
    return result;
}

加密时每2个原字符后插入一个随机字母,因此加密后的字符串结构为:[原字符1][原字符2][随机字符][原字符3][原字符4][随机字符]...。上述代码通过跳过每3个字符中的第3个(或直接按3字符分组取前2个),精准移除所有插入的随机字符,保留原消息的有效内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:22:52