题目描述:

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

示例 1:

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。
示例 2:

输入: "aba"

输出: False
示例 3:

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

解题思路:

假设原非空字符串为SM,其由他一个子串SS重复多次构成,则子串SS需要满足以下条件:

1.SS的长度<=SM的长度一半。

2.字符串SM以SS的长度为周期循环==》SM[SS.length+i]==SM[i]

 1 class Solution {
 2     public boolean repeatedSubstringPattern(String s) {
 3         int n=s.length();
 4         boolean match=true;
 5         //若由子串重复构成,则子串长度最多为母串的一半
 6         for(int i=1;i<=n/2;i++){
 7             if(n%i==0){
 8                 match=true;
 9                 //遍历看是否匹配
10                 for(int j=i;j<n;j++){
11                     //若不匹配跳出本轮循环
12                     if(s.charAt(j)!=s.charAt(j-i)){
13                     match=false;
14                     break;
15                     }
16                 }
17                 //若匹配成功则存在
18                 if(match){
19                     return true;
20                 }
21             }
22         }
23         //直到长度为母串的长度的二分之一时仍无法匹配则不存在。
24         return false;
25        
26     }
27 }

 

posted on 2021-03-25 18:14  wxcongajiayou  阅读(44)  评论(0)    收藏  举报