对于字符串
s
和t
,只有在s = t + t + t + ... + t + t
(t
自身连接1次或多次)时,我们才认定 “t
能除尽s
”。
给定两个字符串str1
和str2
。返回最长字符串x
,要求满足x
能除尽str1
且x
能除尽str2
。
示例 1:
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
示例 2:
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
示例 3:
输入:str1 = “LEET”, str2 = “CODE”
输出:“”
解题思路
如果是符合要求,则str1+str2和str2+str1应该相等,
如果符合要求,那连接起来的字符串一定是由其最大公因数的子串连接的,所以只需要求最大公因数,然后从开头开始取出对应的字符串即可
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
if(str1+str2!=str2+str1){
return "";
}else{
int len1 = str1.length();
int len2 = str2.length();
int gcd = std::gcd(len1, len2); //C++17自带的求最大公因数的函数
return str1.substr(0, gcd); //从索引0开始,取最大公因数个字符,其串即符合条件
}
}
};