对于字符串 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]
为大写英文字母
C++
class Solution {
public:
string gcdOfStrings(string str1, string str2)
{
int m=str1.length();
int n=str2.length();
vector<int> tmp;
tmp.push_back(n);
for(int i=n/2;i>=1;i--)
{
if(0==n%i && 0==m%i)
{
tmp.push_back(i);
}
}
for(auto it:tmp)
{
string ss=str2.substr(0,it);
string A;
string B;
for(int k=0;k<n/it;k++)
{
A+=ss;
}
for(int k=0;k<m/it;k++)
{
B+=ss;
}
if(A==str2 && B==str1)
{
return ss;
}
}
return "";
}
};
python
class Solution:
def gcdOfStrings(self, str1: str, str2: str) -> str:
m=len(str1)
n=len(str2)
tmp=[]
tmp.append(n)
for i in range(n//2,0,-1):
if 0==m%i and 0==n%i:
tmp.append(i)
for it in tmp:
ss=str2[0:it]
A=''
B=''
B+=(n//it)*ss
A+=(m//it)*ss
if A==str1 and B==str2:
return ss
return ''