1071. 字符串的最大公因子
分析
-
判断条件:
- 首先,字符串
str1
能否被str2
整除以及str2
能否被str1
整除的关键条件是:str1 + str2 == str2 + str1
。如果这个条件不成立,则不存在一个字符串能够同时整除这两个字符串,返回空字符串
- 首先,字符串
-
最大公因子:
- 如果
str1 + str2 == str2 + str1
,则可以根据字符串的长度来进一步判断最大公因子。 - 假设
str1
的长度为n1
,str2
的长度为n2
,那么最大公因子字符串的长度应该是gcd(n1, n2)
。我们可以利用gcd
函数计算出n1
和n2
的最大公因子,取str1
或str2
的前gcd(n1, n2)
个字符作为最大公因子字符串
- 如果
-
核心步骤:
- 判断
str1 + str2 == str2 + str1
,如果不成立,返回""
- 计算
gcd(len(str1), len(str2))
,然后返回str1
的前gcd
长度的子串
- 判断
时间复杂度
- 计算
gcd
的时间复杂度是O(logmin(n1, n2))
,其中n1
和n2
是str1
和str2
的长度 - 字符串比较的时间复杂度是
O(n1 + n2)
- 截取子串的时间复杂度是
O(gcd(n1, n2))
,由于gcd(n1, n2)
最大为min(n1, n2)
,因此总体时间复杂度是O(n1 + n2)
空间复杂度
空间复杂度为 O(n1 + n2)
C++代码
|
|