最大重复子字符串

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

给你一个字符串 sequence 和 word ,请你返回 最大重复值 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;  // 返回最大连续重复次数
    }
};
相关推荐
文丑颜不良啊18 小时前
LeetCode1661~1680题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode1721~1740题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode1681~1700题目解析
java·leetcode
开开心心就好1 天前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
圣保罗的大教堂1 天前
leetcode 462. 最小操作次数使数组元素相等 II 中等
leetcode
Navigator_Z1 天前
LeetCode //C - 1313. Decompress Run-Length Encoded List
c语言·算法·leetcode
Nuanyt1 天前
LeetCode Hot 100 链表专题(四)· 3 题(Java)
java·算法·leetcode·链表·双指针
圣保罗的大教堂2 天前
leetcode 453. 最小操作次数使数组元素相等 中等
leetcode
Tisfy2 天前
LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)
算法·leetcode·题解·遍历·反向思维
君万2 天前
【LeetCode每日一题】回溯:46. 全排列 78. 子集 39. 组合总和
算法·leetcode·go