Description:
Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.
Example 1:
Input: "abab"
Output: True
Explanation: It's the substring "ab" twice.
Example 2:
Input: "aba"
Output: False
Example 3:
Input: "abcabcabcabc"
Output: True
Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)
题意:给定一个字符串S,判断这个字符串是否可以由字串重复n此获得;
解法:我们从子串sub长度为1一直遍历到长度为S.length() / 2;因为子串不可以同S相同,所以字串的最大长度为S.length() / 2;得到这个字串之后,我们就知道了这个字串需要重复的次数为S.length() / sub.length()(对不能整除的不作考虑);
Java
class Solution {
public boolean repeatedSubstringPattern(String s) {
for (int len = 1; len <= s.length() / 2; len++) {
String str = s.substring(0, len);
if (s.length() % str.length() != 0) {
continue;
}
if (repeatedSubstring(str, s.length() / str.length()).equals(s)) {
return true;
}
}
return false;
}
//将字符串重复n次,返回一个新的字符串
private String repeatedSubstring(String s, int n) {
return String.join("", Collections.nCopies(n, s));
}
}