'''
给定一个非空的字符串，判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母，并且长度不超过10000。
示例 1:
输入: "abab"
输出: True

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

思路：
首先，理解一下题目的意思：
1.找出重复的字符串单元t，验证字符串是否是由t * n（n为重复的次数）组成。
问题的关键是如何找到一个重复单元。
注意最后一个示例：
输入: "abcabcabcabc"
输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)**
这个解释非常的关键，有就是说我们可以不用找到重复的最小单元进行判断，可以是几个重复单元构成的大的单元也行。

那么，我们可以这样做：
一个字符串s如果是由重复字符串构成的，那么字符串s的长度一定是某一个重复单元的整数倍，这里的这个重复单元不一定非要是最小的重复单元
而且，如果s是由重复字符串构成的，那么它的一个最大的重复字符子串的长度只能是a = len（s）//2（这里指偶数长度的字符串）
对于长度为奇数，偶数的一般情况，可以这样考虑：
对于任何一个子串的长度r，只有len（s） % r == 0，这个字串才有可能是重复单元，那么可以从a往前寻找这样的子串，满足以下两个条件：
1.字串的长度r必须是l = len（s）的一个因数
2.满足条件1的情况下，n = len（s）//r，还要满足s == s[:l] * n
一直往前遍历，直到a=0，则返回False
'''
def repeatsubchar(s):
    n=len(s)
    a=n//2
    while a>0:
        if n%a==0:
            m=n//a
            if s==s[:a]*m:
                return True
        a-=1
    return False