1071. 字符串的最大公因子 - 力扣(LeetCode)


这个问题的本质是求 两个字符串的最大公因子 (Greatest Common Divisor, GCD)。可以使用 最大公因子算法 (GCD) 来解决。
解题思路
- 找出两个字符串的公共前缀,如果它们有相同的前缀,那么它们可能有公共因子。
- 使用数学上的 GCD 方法,找到
str1和str2长度的最大公因子gcd(len(str1), len(str2))。 - 截取
str1的前gcd_length个字符,它就是我们要找的最大公因子字符串。
Python 代码
from math import gcd
def gcdOfStrings(str1: str, str2: str) -> str:
if str1 + str2 != str2 + str1: # 如果拼接后不相等,说明没有公因子
return ""
gcd_length = gcd(len(str1), len(str2)) # 计算最大公因数
return str1[:gcd_length] # 提取前缀作为最大公因子
# 示例
print(gcdOfStrings("ABCABC", "ABC")) # 输出 "ABC"
print(gcdOfStrings("ABABAB", "ABAB")) # 输出 "AB"
print(gcdOfStrings("LEET", "CODE")) # 输出 ""
解释
str1 + str2 == str2 + str1是判断str1和str2是否由相同的子串重复构成的关键。gcd(len(str1), len(str2))计算两个字符串长度的最大公因数。- 取
str1的前gcd_length个字符作为答案。
这个方法的时间复杂度是 O(N + M),其中 N 和 M 分别是 str1 和 str2 的长度。
644

被折叠的 条评论
为什么被折叠?



