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