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