先计算最小公倍数,就是可能的最大值;然后分析s1,s2的前k个是否相同,并且是否都能被这几个表示,得到最后结果。
class Solution {
public:
int MCD(int a, int b){
while(a!=b)
{
if(a>b) a=a-b;
else b=b-a;
}
return a;
}
bool judge(string s, int a){
for(int i=a;i<s.size();i++){
if (s[i] != s[i-a]){
return false;
}
}
return true;
}
string gcdOfStrings(string str1, string str2) {
int a = MCD(str1.size(), str2.size());
cout<<a<<endl;
for (int ii=a;ii>=1;ii--){
if (judge(str1, ii) && judge(str2, ii)){
string res1 = str1.substr(0, ii);
string res2 = str2.substr(0, ii);
if (res1==res2){
return res1;
}
}
}
return "";
}
};