LeetCode题解(1071):字符串的最大公因子(Python)
发布日期:2021-06-29 19:55:21 浏览次数:2 分类:技术文章

本文共 944 字,大约阅读时间需要 3 分钟。

题目:(简单)

标签:字符串

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( 1 ) O(1) O(1) 40ms (75.64%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 36ms (92.55%)
Ans 3 (Python)

解法一:

def gcdOfStrings(self, str1: str, str2: str) -> str:    size1 = len(str1)    size2 = len(str2)    size = min(size1, size2)    for i in range(size, 0, -1):        k1 = size1 / i        k2 = size2 / i        if k1 % 1 == 0 or k2 % 1 == 0:            if str1[:i] * int(k1) == str1 and str1[:i] * int(k2) == str2:                return str1[:i]    else:        return ""

解法二:

【思路】

如果存在最大公因字符串,那么str1和str2一定都是最大公约字符串的整数倍,那么str1+str2一定等于str2+str1,所以我们可以通过判断str1+str2是否等于str2+str1来判断是否存在最大公约字符串。

如果存在最大公约字符串,那么如果循环周期小于两字符串长度的最大公约数,那么长度两字符串长度的最大公约数的字符串也一定是一个循环周期,且是最大的循环周期,因此直接返回长尾两字符串长度最大公约数的字符串即可。

def gcdOfStrings(self, str1: str, str2: str) -> str:    size = math.gcd(len(str1), len(str2))    if str1 + str2 == str2 + str1:        return str1[: size]    return ""

转载地址:https://dataartist.blog.csdn.net/article/details/107103468 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode题解(1078):Bigram分词(Python)
下一篇:LeetCode题解(1051):生成非递减顺序排列的最小移动人数(Python)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月06日 08时00分53秒