字符串中找出最长最多重复的子串

92 阅读1分钟

题目

字符串中找出最长最多重复的子串

  • 通过 Map 记录每个子串及其出现的次数。

  • 外层循环遍历字符串,内层循环生成从当前位置开始的所有可能子串,并更新其出现次数。

  • 最后,遍历 Map,找出出现次数最多且长度最长的子串,并返回结果

function findLongestRepeatedSubstring(str) {
    // 使用一个 Map 来记录子串及其出现的次数
    const substringCount = new Map();
    
    // 遍历字符串并记录每个子串出现的次数
    for (let i = 0; i < str.length; i++) {
        for (let len = 1; i + len <= str.length; len++) {
            const substring = str.substr(i, len);
            if (substringCount.has(substring)) {
                substringCount.set(substring, substringCount.get(substring) + 1);
            } else {
                substringCount.set(substring, 1);
            }
        }
    }
    
    let longestRepeatedSubstring = '';
    let maxCount = 0;
    
    // 找出出现次数最多且长度最长的子串
    substringCount.forEach((count, substring) => {
        if (count > maxCount || (count === maxCount && substring.length > longestRepeatedSubstring.length)) {
            longestRepeatedSubstring = substring;
            maxCount = count;
        }
    });
    
    return longestRepeatedSubstring;
}

// 示例用法
const inputString = "abcbcabcabb";
const longestRepeatedSubstr = findLongestRepeatedSubstring(inputString);
console.log("最长且最多重复的子串:", longestRepeatedSubstr);