LeetCode--459.重复的子字符串(字符串/KMP算法)

459.重复的子字符串

题目描述

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

复制代码
输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。

示例 2:

复制代码
输入: s = "aba"
输出: false

示例 3:

复制代码
输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

提示:

  • 1 <= s.length <= 104
  • s 由小写英文字母组成

解题思路

利用KMP算法,找到与最长相等前后缀子串互补的子串:

代码

java 复制代码
class Solution {

    public boolean repeatedSubstringPattern(String s) {
        int len = s.length();
        int[] next = new int[len];
        // 初始化
        int j = 0;
        next[0] = j;
        for(int i=1; i<len; i++){
            // 最长前缀和最长后缀不匹配
            // 这里只关注第i个字符左侧字符串(不包含i)的前后缀
            while(j>0 && s.charAt(i)!=s.charAt(j)){
                // 回退
                j = next[j-1];
            }
            // 匹配成功
            if(s.charAt(i)==s.charAt(j))
            j++;
            next[i] = j;
        }
        if(next[len-1] != 0 && len % (len - next[len - 1] ) == 0)
        return true;

        return false;
    }
}
相关推荐
逻辑驱动的ken13 小时前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
刘大猫.13 小时前
宝马发布全新AI智能座舱助手 能理解用户复杂出行需求
人工智能·算法·机器学习·ai·大模型·算力·ai智能座舱助手
如何原谅奋力过但无声13 小时前
【灵神高频面试题合集01-03】相向双指针、滑动窗口
数据结构·python·算法·leetcode
leoufung13 小时前
LeetCode 42:接雨水 —— 从“矩形法”到双指针的完整思考过程
java·算法·leetcode
_日拱一卒14 小时前
LeetCode:543二叉树的直径
算法·leetcode·职场和发展
汉克老师14 小时前
GESP2025年3月认证C++五级( 第一部分选择题(9-15))
c++·算法·高精度计算·二分算法·gesp5级·gesp五级
穿条秋裤到处跑15 小时前
每日一道leetcode(2026.04.28):获取单值网格的最小操作数
算法·leetcode·职场和发展
leoufung15 小时前
LeetCode 68. Text Justification 题解:贪心与实现细节
算法·leetcode·职场和发展
WL_Aurora15 小时前
【每日一题】前缀和
python·算法
汉克老师16 小时前
GESP2025年3月认证C++五级( 第二部分判断题(1-10))
c++·算法·分治算法·线性筛法·gesp5级·gesp五级