LeetCode459. 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
示例 2:
输入: "aba"
输出: False
示例 3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
思路:s字符串长度为n,依次取得长度为1~(n/2)的s字符串的子串s1,进而判断s是否由s1重复构成,其中一个s1满足条件即可。
class Solution {
public boolean repeatedSubstringPattern(String s) {
int len=s.length();
for(int i=1;i<=len/2;i++) {
String sonStr=getSonString(s,i);
boolean b=isSonString(s,sonStr);
if(b==true) {
return true;
}
}
return false;
}
//得到从0到n的子串
public String getSonString(String s,int n) {
char a[]=new char[n];
for(int i=0;i<n;i++) {
a[i]=s.charAt(i);
}
String str=new String(a);
return str;
}
//判断s2是否是s1的循环子串
public boolean isSonString(String s1,String s2) {
int len1=s1.length();
int len2=s2.length();
if(len1%len2!=0) {
return false;
}
int i,j;
for(i=0,j=0;i<len1;) {
// System.out.println(s1.charAt(i)+" "+s2.charAt(j));
if(s1.charAt(i)!=s2.charAt(j)) {
// System.out.println("no");
return false;
}
i++;j++;
if(j==len2) {
j=0;
}
}
return true;
}
}
还没有评论,来说两句吧...