给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
例子:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
思路1:枚举
如果字符串有可以重复多次=字符串的子字符串,
则对于某一个长度为n'的字符串(n'<n),i从[n', n)有s[i] = s[i - n']——字符前缀相同。
所以可以通过枚举,不断枚举子字符串,并判断s[i] =? s[i-n'],如果不相同则break,并继续找下一个n',如果发现相同,那么就返回true。最坏条件下,所有子数组长度都不符合判断,则返回false。
Note:
因为至少要存在这样一个子字符串,则说明子字符串的长度至多=字符串长度/2,
同时该子字符串长度可以被字符串整除
public class Solution {
public boolean returnPardonStringPattern(String s) {
int n = s.length();
for (int i = 1; i <= n; i++) {
if ((n % i) == 0) {
boolean match = true;
for (int j = i; j < n; j++) {
if (s.charAt(j) != s.chatAt(j - i)) {
match = false;
break;
}
}
if (match) {
return true;
}
}
}
return false;
}
}