151
社区成员
发帖
与我相关
我的任务
分享1. 先确定 k 的理论上限: max_possible = sequence.size() / word.size() ,因为 k 次重复的总长度不能超过 sequence 的长度。
2. 从最大可能的 k 开始向下遍历,每次构造 word 重复 k 次的字符串,检查它是否是 sequence 的子串。
3. 第一个满足条件的 k 就是答案;如果遍历到 k=1 都不满足,返回 0 。
如果追求更优的时间复杂度,可以用动态规划:
定义 dp[i] 表示以 sequence[i-1] 结尾的最大重复次数。
当 i >= m 且 sequence.substr(i-m, m) == word 时, dp[i] = dp[i-m] + 1 ;
否则 dp[i] = 0 。
最终取 dp 数组的最大值即可,时间复杂度优化到O(n \cdot m),空间复杂度O(n)(可进一步优化为O(1))。
