459. 重复的子字符串

题目:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
解法:暴力
思路:只有s的因子个字母组成的子串才有可能是结果子串,例如s是“abcabcabc”,只需要判断9个1字母或3个3字母是否是重复的,假如现在的因子是i,则第一组字符串为s.substring(0,i); 只需要判断其他组和第一组是否是相同的字符串即可
代码:
class Solution {
public static boolean repeatedSubstringPattern(String s) {
int len = s.length();
boolean isResult = true; //表示当前target是否是结果子串
if(len0||len1) {
return false;
}
for (int i = 1; i <= len/2; i++) {
if(len%i==0) { //只有s的因子个字母组成的子串才有可能是结果子串
isResult = true;
String target = s.substring(0,i);
int j = i;
while(j<len) {
if(!s.substring(j,j+i).equals(target)) { //只要存在一个不相同,则不是重复
isResult = false;
break;
}
j =j+i;
}
}
if(isResult) {
return true;
}
}
return false;
}
}

解法二:移位
思路:如果s是重复的,则s经过s.length()-1次移位后是s本身,而s+s包含了s的所有移位,故可以将s+s的首尾去掉再判断是否包含s(不去掉的话一定包含)
代码:

posted @ 2021-01-18 10:36  for_ward  阅读(69)  评论(0)    收藏  举报