写一段java程序,给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。输入: s = "abab",输出: true,输入: s = "abcabcabcabc",输出: true
时间: 2023-06-05 10:07:06 浏览: 95
好的,下面是 Java 程序的代码实现:
public boolean repeatedSubstringPattern(String s) {
int n = s.length();
for (int i = 1; i * 2 <= n; i++) {
if (n % i == 0) {
boolean match = true;
for (int j = i; j < n; j++) {
if (s.charAt(j) != s.charAt(j - i)) {
match = false;
break;
}
}
if (match) {
return true;
}
}
}
return false;
}
以上程序实现了一个名为 repeatedSubstringPattern 的方法,其输入参数是一个非空字符串 s,输出结果为一个布尔值,表示 s 是否由它的一个子串重复多次构成。这个方法的实现逻辑是:枚举可能的子串长度,依次判断是否能够重复构成整个字符串,如果找到了符合条件的子串,直接返回 true。如果所有可能的子串长度都不满足条件,返回 false。
例如,对于输入 s = "abab",程序的执行过程如下:
- 首先计算字符串 s 的长度 n = 4。
- 枚举可能的子串长度 i,从 1 到 n/2=2,依次做如下判断:
- 当 i = 1 时,字符串 s 可以重复构成 "a"、"b"、"a"、"b",满足条件,返回 true。
- 当 i = 2 时,字符串 s 可以重复构成 "ab"、"ab",满足条件,返回 true。
- 当 i = 3 时,字符串 s 不满足条件。
- 所有可能的子串长度都已经尝试过,返回 false。
因此,对于输入 s = "abab",程序的输出结果为 true。
对于输入 s = "abcabcabcabc",程序的执行过程类似,返回结果也为 true。
阅读全文