如果直接使用选择子串加移动比较的方法会及其繁琐且浪费时间
类比一个周期性函数的图像,即f(x) = f(x+T)
考虑到如果一个子串长度为 i ,那么原串任意一个位置的字符移动 i 位后应仍是这个字符,若判断至原串结尾仍满足这个条件,则说明该串可以由开头起长度为 i 的子串重复构成
class Solution {
public boolean repeatedSubstringPattern(String s) {
int n = s.length();
for(int i = 1; i <= n / 2; i ++){ // 子串最长为原串一半
if(n % i != 0) // 若长度不能整除则必不满足
continue;
boolean flag = true;
for(int j = 0; j < n - i; j ++){
if(s.charAt(j) != s.charAt(j + i)){
flag = false;
break;
}
}
if(flag){
return true;
}
}
return false;
}
}