题目描述:
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过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 }
浙公网安备 33010602011771号