首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >1668. 最大重复子字符串

1668. 最大重复子字符串

作者头像
飞询
发布2025-08-01 16:49:08
发布2025-08-01 16:49:08
10900
代码可运行
举报
文章被收录于专栏:云同步云同步
运行总次数:0
代码可运行

链接:1668. 最大重复子字符串 - 力扣(LeetCode)

题目

大致的意思就是从 sequence 中是否出现一个子串等于 word的,如果没有输出 0,如果有,输出他连续最大重复的数量

比如:

  • sequence = "ababc",word = "d",返回 0,因为 sequence 没有子串等于 "d"
  • sequence = "abadbc",word = "ab",返回 1,因为sequence 出现子串 "ab",最大连续重复次数为 1
  • sequence = "ababc",word = "ab",返回 2,因为sequence 出现子串 "abab",最大连续重复次数为 2

思路

最简单的方法就是将 sequence 进行遍历,与 word 的第一个字符先进行匹配,如果符合就对接下来的字符与 word继续匹配,如果不符合就继续遍历 sequence

代码

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * 0 ms 击败 100.00% 消耗内存分布 40.83 MB 击败 92.31%
 */
public int maxRepeating(String sequence, String word) {
    // 将 sequence 转换为 char 数组
    char[] sequenceArray = sequence.toCharArray();
    // 将 word 转换为 char 数组
    char[] wordArray = word.toCharArray();
    // 初始化计数器
    int maxCount = 0;
    // 遍历 sequence 数组
    for (int i = 0; i < sequenceArray.length; i++) {
        // 判断 sequenceArray[i] 是否与 wordArray[0] 相等
        if (sequenceArray[i] == wordArray[0]){
            // 用来保存局部的计数
            int count = 0;
            // 用来保存遍历的开始坐标
            int sequenceArrayIndex = i;
            while (true) {
                // 判断 sequenceArray 从 sequenceArrayIndex 开始的字符数组 与 wordArray 是否匹配
                boolean flag = process(sequenceArray, wordArray, sequenceArrayIndex);
                // 说明从 sequenceArrayIndex 开始的字符数组 与 wordArray 不匹配
                if (!flag) {
                    break;
                }
                // 如果匹配,说明已经遍历完整个 wordArray,然后进行再次匹配
                sequenceArrayIndex = sequenceArrayIndex + wordArray.length;
                count++;
            }
            // 取最大计数
            maxCount = Math.max(maxCount, count);
        }
    }
    return maxCount;
}

/**
 * 判断从 sequenceIndex下标 开始对 sequenceArray 以及 wordArray 进行匹配,是否满足
 *  sequenceIndex 开始的 wordArray 长度的字符 与 wordArray 完全匹配
 * @param sequenceArray sequence 的字符数组
 * @param wordArray word 的字符数组
 * @param sequenceIndex sequenceArray 开始的下标
 * @return true 表示完全匹配,false 表示不匹配
 */
public boolean process(char[] sequenceArray, char[] wordArray, int sequenceIndex) {
    int wordIndex = 0;
    // 循环直到 wordArray 遍历完成
    while (wordIndex < wordArray.length) {
        // false 条件:sequenceArray 遍历完成  或者  sequenceArray 和 wordArray 的字符对应不上
        if (sequenceIndex >= sequenceArray.length || sequenceArray[sequenceIndex++] != wordArray[wordIndex++]){
            return false;
        }
    }
    return true;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档