题目
字符串中找出最长最多重复的子串
-
通过 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);