给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
public repeatedSubstringPattern(String s){
int n = s.length();
for(int i = 1; i <= n / 2; i++){
if(n % i != 0) continue;
// substring获取子字符串是左闭右开的
String ss = s.substring(0, i);
boolean flag = true;
for(int j = i; j < n; j += i){
String sss = substring(j, j + i);
if(!ss.equals(sss)) {
flag = false;
break;
}
}
if(flag) return true;
}
return false;
}
复杂度:n*n
逆天方法,一行解决,还没看证明过程
public boolean repeatedSubstringPattern(String s){
return (s + s).indexOf(s, 1) != s.length();
}
KMP待看