LeetCode-459. 重复的子字符串


题目来源

459. 重复的子字符串

题目详情

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

示例 1:

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

示例 2:

输入: s = "aba"
输出: false

示例 3:

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

提示:

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

题解分析

解法一:KMP算法

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        return kmp(s + s, s);

    }

    private boolean kmp(String query, String pattern){
        int n = query.length();
        int m = pattern.length();
        int[] next = new int[m];
        Arrays.fill(next, -1);
        // 构造next数组
        for(int i=1; i