LeetCode 1668:JavaScript实现最大重复子字符串解法
本文针对LeetCode第1668题“最大重复子字符串”,提供基于JavaScript的高效解题方案。核心思路是利用字符串的包含关系检测,逐步构建重复序列,从而确定单词 word 在 sequence 中连续出现的最大次数 k。
题目解析与逻辑
给定两个字符串 sequence 和 word,我们需要计算 word 连续重复 k 次后形成的字符串是否仍为 sequence 的子串。目标是找出最大的 k 值。如果 word 根本不是 sequence 的子串,则结果为 0。
第1步:边界条件检查
目的:快速排除无效情况,提升执行效率。
动作:
1. 若 word 的长度大于 sequence 的长度,显然无法构成重复子串,直接返回 0。
2. 若 sequence 不包含单次出现的 word,同样无法构成重复,直接返回 0。
完成状态:通过上述两项任一检查时,程序立即终止并返回 0。
第2步:初始化迭代变量
目的:建立用于检测重复累积的基础字符串和计数器。
动作:
1. 初始化当前重复字符串 str 为 word。
2. 初始化重复计数 count 为 0。
重要参数:str.length <= sequence.length 作为循环维持条件之一(实际更严格的限制是包含关系的布尔值)。
第3步:循环检测与累加
目的:逐步增加 word 的重复次数,直到不再匹配。
入口:进入 while 循环,前提是 sequence 包含当前的 str。
具体动作:
1. 检查 sequence.includes(str) 是否为真。
2. 若为真:将 word 追加到 str 末尾(str += word),并将 count 自增 1。
3. 若为假:说明继续追加 word 会导致不匹配,此时前一次的状态即为最大重复值,直接返回 count。
可观察状态:每次循环后 str 变长,count 递增,直至 break 或 return。
var maxRepeating = function(sequence, word) {
// 边界检查:长度超限或根本不存在
if(word.length > sequence.length || !sequence.includes(word)) {
return 0;
}
let str = word; // 初始化的重复子串
let count = 0; // 记录重复次数
// 当当前累积的 str 仍然存在于 sequence 中时继续循环
while(str.length <= sequence.length) {
if(sequence.includes(str)) {
str += word; // 追加一个 word,尝试更高重复数
count++; // 计数加一
} else {
// 如果当前 str 已不在 sequence 中,说明上一次就是最大值
return count - 1;
}
}
return count;
};
关键知识点
String.includes():ES6 引入的方法,用于判断一个字符串是否包含指定的子字符串。如果包含返回 true,否则返回 false。这是本题核心的判定依据。
String.repeat():虽然本题使用字符串拼接 str += word 直观易懂,但也可以使用 str.repeat(k) 来构造重复 k 次的字符串进行验证。不过在本算法中,逐步累加比预先构造所有可能长度的字符串更高效,因为它能提前终止不匹配的情况。
以上就是JavaScript前端学算法题解LeetCode最大重复子字符串的详细内容,更多关于JavaScript算法最大重复子字符串的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









