给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
s = “abcabcabcabc”
true
解释: 可由子串 “abc” 重复四次构成。 (或子串 “abcabc” 重复两次构成。)
public class Main{
public static void main(String[] args) {
String s = "abcabcabcabc";
System.out.println(repeatedSubstringPattern(s));//true
}
/**
* 从0索引开始枚举 存在的重复字符串(模式串) 暴力
*
* @param s 主串
* @return 是否存在要求的模式串
*/
public static boolean repeatedSubstringPattern(String s) {
//字符串长度
int len = s.length();
int flag = 1;
//重复字符串的长度应该大于等于1,小于等于2/len
for (int i = 1; i <= len / 2; i++) {
//只有能切割成自然数个重复字符串时,才进行判断
//这里假定i就是重复字符串的长度
if (len % i == 0) {
flag = 1;
for (int j = i; j < len; j++) {
if (s.charAt(j) != s.charAt(j - i)) {
//j:指向当前主串的指针 i:假定的模式串长度
flag = 0;//如果出现一次匹配不成功的情况,则令标记变量为0,跳出本次循环
break;
}
}
if (flag == 1) {
//经过上述循环之后,判断是否存在重复的模式串
return true;
}
}
}
//不存在,返回假
return false;
}
}