题目描述
For strings S
and T
, we say "T
divides S
" if and only if S = T + ... + T
(T
concatenated with itself 1 or more times)
Return the largest string X
such that X
divides str1 and X
divides str2.
Example 1:
Input: str1 = "ABCABC", str2 = "ABC" Output: "ABC"
Example 2:
Input: str1 = "ABABAB", str2 = "ABAB" Output: "AB"
Example 3:
Input: str1 = "LEET", str2 = "CODE" Output: ""
Note:
1 <= str1.length <= 1000
1 <= str2.length <= 1000
str1[i]
andstr2[i]
are English uppercase letters.
解析
如果它们有公因子 abc
,那么 str1
就是 mmm 个 abc
的重复,str2
是 nnn 个 abc
的重复,连起来就是 m+nm+nm+n 个 abc
,m+nm+nm+n 个 abc
跟 n+mn+mn+m 个 abc
是一样的。
可以想到 str1 + str2 !== str2 + str1
是无解的充要条件。
s1.substr(0,gcd(s1.size(),s2.size()))
.
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
if(str1+str2!=str2+str1) return "";
return str1.substr(0,gcd(str1.size(),str2.size()));
}
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
};