日野弥生:勉強しよう

LeetCode 459 - 重复的子字符串

发表于2025年05月14日

#字符串 #字符串匹配

列举出长度的所有因数,进行分别的字符串比较。

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        # 求所有因数的方法
        def get_factors(n):
            factors = set()
            # 只需要遍历从1到n ** 0.5,每找到一个因数i,就能通过n // i求出另一个因数
            for i in range(1, int(n ** 0.5) + 1):
                if n % i == 0:
                    factors.add(i)
                    factors.add(n // i)
            return sorted(factors)
        factors = get_factors(len(s))
        # 抛弃数组长度,也就是最后一个值
        factors = factors[0:len(factors) - 1]

        # 按照每个因数分段比对
        def repeatedSubstringPatternIMPL(s: str, n: int):
            sSub = s[0:n]
            i = n
            while i < len(s):
                if sSub != s[i:i + n]:
                    return False
                else:
                    i += n
            return True

        # 只要有一个因数能做到就提前剪枝结束
        for i in range(len(factors) - 1, -1, -1):
            if repeatedSubstringPatternIMPL(s, factors[i]) == True:
                return True
        return False

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/repeated-substring-pattern/

上一篇

LeetCode 389 - 找不同

下一篇

LeetCode 704 - 二分查找