最大重复子字符串

给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word重复值为 k 。单词 word 大重复值 是单词 wordsequence 中最大的重复值。如果 word 不是 sequence 的子串,那么重复值 k0

给你一个字符串 sequenceword ,请你返回 最大重复值 k

示例 1:

复制代码
输入:sequence = "ababc", word = "ab"
输出:2
解释:"abab" 是 "ababc" 的子字符串。

示例 2:

复制代码
输入:sequence = "ababc", word = "ba"
输出:1
解释:"ba" 是 "ababc" 的子字符串,但 "baba" 不是 "ababc" 的子字符串。

示例 3:

复制代码
输入:sequence = "ababc", word = "ac"
输出:0
解释:"ac" 不是 "ababc" 的子字符串
cpp 复制代码
class Solution {
public:
    int maxRepeating(string sequence, string word) {
        // 边界条件:如果word长度大于sequence,不可能有匹配,直接返回0
        if(word.size() > sequence.size())
            return 0;
        
        int i = 0;          // sequence中当前匹配的起始索引
        int k = 0;          // 记录最大连续重复次数(最终结果)
        int a = 0;          // 记录当前连续匹配的次数
        
        // 循环条件:确保从i开始有足够长度匹配word
        while(i <= sequence.size() - word.size()) {
            int pos = i;    // 保存当前起始位置,用于偏移计算
            int j = 0;      // word中当前匹配的字符索引
            
            // 尝试匹配word的每个字符
            while(j < word.size()) {
                // 若字符匹配,继续检查下一个字符
                if(sequence[pos + j] == word[j]) {
                    j++;  // 移动到word的下一个字符
                    
                    // 当完整匹配一次word时
                    if(j == word.size()) {
                        a++;  // 当前连续匹配次数+1
                        k = max(k, a);  // 更新最大连续次数
                        i = i + word.size();  // 起始位置后移word长度,继续检查下一次连续匹配
                    }
                } else {
                    // 匹配失败时:
                    // 1. 回退到本次连续匹配开始位置的下一个字符
                    // (减去已匹配的总长度,再加1)
                    i = i - (a * word.size()) + 1;
                    a = 0;  // 重置当前连续匹配次数
                    break;  // 退出当前word的匹配循环
                }
            }
        }
        
        return k;  // 返回最大连续重复次数
    }
};
相关推荐
VT.馒头9 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
毅炼10 小时前
hot100打卡——day17
java·数据结构·算法·leetcode·深度优先
Tisfy10 小时前
LeetCode 3010.将数组分成最小总代价的子数组 I:排序 OR 维护最小次小
算法·leetcode·题解·排序·最小次小值
草履虫建模12 小时前
力扣算法 121. 买卖股票的最佳时机
算法·leetcode·职场和发展·贪心算法·动态规划·一次遍历
爱尔兰极光12 小时前
LeetCode--有序数组的平方
算法·leetcode·职场和发展
haluhalu.12 小时前
LeetCode---基础算法刷题指南
数据结构·算法·leetcode
iAkuya12 小时前
(leetcode)力扣100 58组合总和(回溯)
算法·leetcode·职场和发展
爱尔兰极光13 小时前
LeetCode--移除元素
算法·leetcode·职场和发展
苦藤新鸡13 小时前
51.课程表(拓扑排序)-leetcode207
数据结构·算法·leetcode·bfs