1. 题目来源
链接:字符串的最大公因子
2. 题目说明
对于字符串 S
和 T
,只有在 S = T + ... + T
(T
与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”
。
返回最长字符串 X
,要求满足 X
能除尽 str1
且 X
能除尽 str2
。
示例 1:
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
示例 2:
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
示例 3:
输入:str1 = “LEET”, str2 = “CODE”
输出:""
提示:
1 <= str1.length <= 1000
1 <= str2.length <= 1000
str1[i] 和 str2[i] 为大写英文字母
3. 题目解析
方法一:思维+gcd问题+顶级解法
这个想法,真的是厉害…我暴力枚举一直出错,一道考思维的问题,也不必纠结太多了。
来自题解大佬:1071. 字符串的最大公因子
官方解答给出了三种方法,并对上面 充要条件 的猜想给出了数学证明,可以积极研读!
参见代码如下:
// 执行用时 :4 ms, 在所有 C++ 提交中击败了93.06%的用户
// 内存消耗 :8.8 MB, 在所有 C++ 提交中击败了100.00%的用户
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
if (str1 + str2 != str2 + str1) return "";
// __gcd() 为c++自带的求最大公约数的函数
return str1.substr(0, __gcd((int)str1.length(), (int)str2.length()));
}
};