题目描述
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2
示例
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
输入:str1 = “LEET”, str2 = “CODE”
输出:""
分析
两个字符串存在最大公因子,如果这个最大公因子存在,显然其长度也应该是两个字符串长度的最大公约数。如果存在公因子ans,那么str1、str2都可以写成n个ans的形式,既然如此,将str1和str2拼接在一起,其结果都一样,与顺序无关
Code
class Solution {
private:
int gcd(int a, int b) { //返回两个数的最大公约数
return !b ? a : gcd(b, a%b);
}
public:
string gcdOfStrings(string str1, string str2) {
int len1 = str1.length(), len2 = str2.length();
if(str1+str2 == str2+str1) { //存在公因子
return str1.substr(0, gcd(len1, len2)); //返回最大公因子
} else {
return "";
}
}
};