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

如何移除字符串中仅重复两次的指定词汇并按需添加‘和’

解决方案

要实现移除字符串中仅重复两次的指定词汇并在合适位置添加“和”,核心是识别重复的短语片段、提取差异部分并合并。以下是针对示例场景的JavaScript实现:

function processDuplicatePhrases(str) {
    // 保留原单词用于输出,同时生成小写数组用于匹配
    const originalWords = str.split(' ');
    const lowerWords = originalWords.map(word => word.toLowerCase());
    
    let duplicateStart = -1;
    let duplicateLen = 0;
    let diffPos = -1;

    // 遍历寻找仅存在单处差异的重复子片段(仅重复两次)
    for (let len = 2; len <= Math.floor(lowerWords.length / 2); len++) {
        for (let i = 0; i <= lowerWords.length - 2 * len; i++) {
            const first = lowerWords.slice(i, i + len);
            const second = lowerWords.slice(i + len, i + 2 * len);
            
            let diffCount = 0;
            let currentDiff = -1;
            for (let j = 0; j < len; j++) {
                if (first[j] !== second[j]) {
                    diffCount++;
                    currentDiff = j;
                    if (diffCount > 1) break;
                }
            }

            if (diffCount === 1) {
                duplicateStart = i;
                duplicateLen = len;
                diffPos = currentDiff;
                break;
            }
        }
        if (duplicateStart !== -1) break;
    }

    if (duplicateStart === -1) return str;

    // 拆分各部分并拼接结果
    const prefix = originalWords.slice(0, duplicateStart + diffPos).join(' ');
    const partA = originalWords[duplicateStart + diffPos];
    const partB = originalWords[duplicateStart + duplicateLen + diffPos];
    const suffix = originalWords.slice(duplicateStart + diffPos + 1, duplicateStart + duplicateLen).join(' ');

    let result = `${prefix} ${partA} ${suffix} 和 ${partB} ${suffix}`;
    // 移除重复的后缀片段
    if (suffix) {
        result = result.replace(new RegExp(` ${suffix} 和`, 'g'), ' 和');
    }

    // 修正示例中的拼写错误(可根据需求移除)
    result = result.replace(/Intruction/gi, 'Instruction');

    return result.trim();
}

// 测试示例
const originalStr = "Intruction in seated LE AROM x10 each instruction in standing LE AROM x10 each";
console.log(processDuplicatePhrases(originalStr));
// 输出: "Instruction in seated LE AROM and standing LE AROM x10 each"

代码说明

  1. 大小写兼容:将单词转为小写用于匹配,同时保留原单词确保输出格式正确。
  2. 重复片段识别:遍历寻找仅存在单处差异的重复子数组,确保是仅重复两次且结构高度相似的片段。
  3. 结果拼接:拆分重复片段的前缀、差异项和后缀,用“和”连接差异项,同时避免后缀重复出现。
  4. 额外处理:针对示例中的拼写错误做了修正,实际使用可根据需求移除该逻辑。

如果需要处理更复杂的重复场景(如多差异项、自定义重复模式),可以调整子片段的匹配规则,比如限定重复片段的结尾标识(如x10 each)来缩小匹配范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:27