LeetCode链接:力扣
题目:
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
示例:
输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。
代码:
class Solution {
public boolean repeatedSubstringPattern(String s) {
if(s.length() == 0){
return false;
}
int[] next = new int[s.length()];
//构建next数组
getNext(next, s);
int len = s.length();
if(next[len-1] != -1 && len % (len - (next[len-1] + 1)) == 0){
return true;
}
return false;
}
public void getNext(int[] next, String s){
next[0] = -1;
int j = -1;
for(int i = 1; i < s.length(); ++i){
while(j >= 0 && s.charAt(i) != s.charAt(j+1)){
j = next[j];
}
if(s.charAt(i) == s.charAt(j+1)){
j++;
}
next[i] = j;
}
}
}