思路:看了一个大佬的题解,非常的巧妙。
首先,str1和str2一定是由相同的子串构成的,只不过子串的数量不同而已,所以str1+str2==str2+str1. 若不满足前面的等式,那么表示没有相同的子串。
其次,假设str1的长度是m构成,str2的长度是n. 那么最大的子串长度一定能同时整除m,n。 其实最大长度就是gcd(m,n)。
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
int len1=str1.size(),len2=str2.size();
if(str2+str1!=str1+str2) return "";
return str1.substr(0,gcd(len1,len2));
}
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
};
来源:CSDN
作者:untilyouydc
链接:https://blog.csdn.net/qq_40774175/article/details/104811252