题目描述:
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。
示例 2:
输入: "aba" 输出: False
示例 3:
输入: "abcabcabcabc" 输出: True 解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
解题思路:
既然是重复出现组成的,那么一定是第一个字母first到后面的另外某一个相等的字母first2是一个重复体,那么我就开始尝试,没遇到一个相等的first就把前面当做一个重复体用judgeRep函数试一下看看行不行。
judgeRep(String s,String sub)函数是用来判断字符串s能否由子字符串sub重复得来的,思路是看字符串的长度是不是子串的整数倍,如果是的话就重复倍数次然后看看他们相等不,然后判断。
第一步:
第二步:
代码实现(Java语言):
class Solution {
public boolean repeatedSubstringPattern(String s) {
char[] chars = s.toCharArray();
char first = chars[0];
String subStr = "";
for(int i=1;i<chars.length;i++){
if(chars[i] == first){
subStr = s.substring(0,i);
if(judgeRep(s,subStr))
return true;
}
}
return false;
}
public boolean judgeRep(String s,String sub){
if(s.length() % sub.length() != 0)
return false;
int group = s.length()/sub.length();
String rep = "";
for(int j = 0;j < group;j++){
rep += sub;
}
if(rep.equals(s))
return true;
else
return false;
}
}