leetcode459.重复的子字符串

143 阅读1分钟

459.重复的子字符串

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

输入: "aba"           输出: False
输入: "abcabcabcabc"  输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        size = len(s)
        for i in range(1, size // 2 + 1):
            if size % i == 0 and s[:i] * (size // i) == s:  # 可整除
                return True
        return False
"""
暴力法
时间复杂度 O(kn),其中n是字符串长度,k是n的约数个数
若字符串可以由其子串重复若干次构成,则子串的起点一定从原串的下标0开始
并且子串的长度一定是原串长度的约数
整数约数的个数可以通过统计其质因子的幂得到,而输入规模10000以内整数的约数个数很少
因此通过暴力法,枚举子串长度即可
"""