leetcode 459. 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
示例 2:
输入: "aba"
输出: False
示例 3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/repeated-substring-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1:获取字符串最后一个字符 end, 遍历字符串,寻找==end的索引位置位n。
2:把 从0 到n的字符串当作潜在的子串str。从n之后遍历 是否都是str的循环。
public boolean repeatedSubstringPattern(String s) { int length = s.length(); char[] arr = s.toCharArray(); char end =arr[length - 1]; int n = find(0,arr, end); int index = 0; for (int i = n; i < length; i++) { if (arr[i] != arr[index++]) { n = find(i - index + 1, arr, end); i = n - 1; index = 0; } if (index == n) { index = 0; } } return n != length; } private int find(int start, char[] arr, char end) { int length = arr.length; int n = 1; for (int i = start; i < length; i++) { if (arr[i] == end && length % (i + 1) == 0) { n = i + 1; break; } } return n; }

若不是,则从n 之后继续寻找值为end的位置,替换为n,重复上面步骤。
3:最后判断n != length并返回。

浙公网安备 33010602011771号