最大重复子字符串

给你一个字符串 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;  // 返回最大连续重复次数
    }
};
相关推荐
琢磨先生David6 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
超级大福宝6 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
Charlie_lll6 天前
力扣解题-88. 合并两个有序数组
后端·算法·leetcode
菜鸡儿齐6 天前
leetcode-最小栈
java·算法·leetcode
Frostnova丶6 天前
LeetCode 1356. 根据数字二进制下1的数目排序
数据结构·算法·leetcode
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
样例过了就是过了6 天前
LeetCode热题100 环形链表 II
数据结构·算法·leetcode·链表
tyb3333336 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
踩坑记录6 天前
leetcode hot100 74. 搜索二维矩阵 二分查找 medium
leetcode
TracyCoder1236 天前
LeetCode Hot100(60/100)——55. 跳跃游戏
算法·leetcode