解题思路:
KMP算法
len - next[len - 1]作为最小公共子串的长度
len % (len - next[len - 1]) == 0检测能否构成重复串,能构成整数倍,代表可以构成
注意:
i 从 j 的下一位开始,即 i 初始化为 1
next[len - 1]需要大于0(等于0时,len%len一定满足==0,未起到判断效果,因为一定返回true)
java
class Solution {
public boolean repeatedSubstringPattern(String s) {
int len = s.length();
int[] next = new int[len];
int j = 0;
next[0] = 0;
for (int i = 1; i < s.length(); 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;
}
}