解法一:
public class Solution {
public boolean repeatedSubstringPattern(String s) {
/*int length = s.length();
if(length == 0)
return true;
int count = 0;//用于计数,记录字符串s被切割了几次,初始应该是0,每判断一次判断长度能否被2整除就加1
while(length != 0 && length % 2 == 0){//将字符串切成一半一半的,去找是否由重复的子串形成,子串的形成有大有小,所以用循环
count++;
length /= 2;
String tmp = s.substring(0, 0 + length);
StringBuilder is = new StringBuilder();
for(int i = 0; i <= count; i++){//根据重复次数来拼凑
is.append(tmp);
System.out.println(is);
}
if(is.toString().equals(s)){
return true;
}
}
return false;*/
//上面那种解法不对,每次将字符串s对半分,但是存在“ababab”的情况,不是2的幂,刚好重复3次
//换种思路,记录重复子串的长度
int length = s.length();
if(length <= 1)
return false;
int repeat = 1;//要判断也是从1开始,子串最小长度是1
while(repeat <= length / 2){//最大重复长度是length/2
if(length % repeat == 0){
String temp = s.substring(0, 0+repeat);//取出重复的子串
int cc = length / repeat;//记录重复次数
StringBuilder sb = new StringBuilder();
for(int i = 0; i < cc; i++){//用子串拼接
sb.append(temp);
//System.out.println(sb);
}
if(sb.toString().equals(s)){
return true;
}
}
repeat++;
}
return false;
}
}
本文介绍了一种用于判断一个字符串是否由其子串重复组成的算法。通过不断尝试不同的子串长度并检查整个字符串是否能完全由该子串组成来实现这一目标。此算法能够有效地解决诸如ababab等非2的幂次倍数的重复子串问题。
1481

被折叠的 条评论
为什么被折叠?



