最大重复子字符串

给你一个字符串 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;  // 返回最大连续重复次数
    }
};
相关推荐
牧天白衣.7 分钟前
力扣215.数组中的第K个最大元素
算法·leetcode
Boop_wu1 小时前
[Java 算法] 动态规划(4)
数据结构·算法·leetcode
旖-旎1 小时前
分治(计算右侧小于当前元素的个数)(7)
c++·学习·算法·leetcode·排序算法·归并排序
We་ct2 小时前
LeetCode 137. 只出现一次的数字 II:从基础到最优的两种解法详解
前端·数据结构·算法·leetcode·typescript·位运算
旖-旎2 小时前
分治(交易逆序对的总数)(6)
c++·算法·leetcode·排序算法·归并排序
北顾笙9802 小时前
day14-数据结构力扣
数据结构·算法·leetcode
田梓燊2 小时前
leetcode 239
数据结构·算法·leetcode
XWalnut12 小时前
LeetCode刷题 day4
算法·leetcode·职场和发展
旖-旎13 小时前
分治(库存管理|||)(4)
c++·算法·leetcode·排序算法·快速选择算法
Kk.080215 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展