public class Solution {
public boolean repeatedSubstringPattern(String str) {
int l = str.length();
for(int i=l/2;i>=1;i--) {
if(l%i==0) {
int m = l/i;
String subS = str.substring(0,i);
StringBuilder sb = new StringBuilder();
for(int j=0;j<m;j++) {
sb.append(subS);
}
if(sb.toString().equals(str)) return true;
}
}
return false;
}
}
public class Solution {
private int[] getPrefix(String pattern) {
int len = pattern.length();
int[] lps = new int[len];
lps[0] = 0;
int matched = 0;
for (int i = 1; i < len; i++) {
while (matched > 0 && pattern.charAt(i) != pattern.charAt(matched)) {
matched = lps[matched - 1];
}
if (pattern.charAt(i) == pattern.charAt(matched)) {
matched++;
}
lps[i] = matched;
}
return lps;
}
public boolean repeatedSubstringPattern(String s) {
int[] prefixFunction = getPrefix(s);
int len = s.length();
int last = prefixFunction[len - 1];
return last != 0 && (len % (len - last) == 0);
}
}