理解题目的意思,给定的两个字符串str1和str2,要求除尽字符串X。
除尽的意思就是可以由多个X来表示str1和str2。
把X当成一份字符串,一份字符串的大小大于等于1.
str1 = AX
str2 = BX
目的是求X。
由上面式子,可以先判断是否能被除尽,能被除尽时,要满足:str1 + str2 = str2 + str1
然后满足能被除尽之后,用gcd算法,即辗转相除法。
辗转相除法:两数的最大公约数 等于 两数中较大 / 小的数 和 两数相除余数 的 最大公约数
一看就是要用递归的做法,直到两数相除余数为0,那么两数的最大公约数等于当前的除数。
不用考虑str1和str2的长度,因为 【两数的最大公约数 等于 两数中较大 / 小的数 和 两数相除余数 的 最大公约数】
拿较大/较小 的数去和余数比就好了。
int gcd(int a,int b) { return !b? a:gcd(b,a%b); }
string gcdOfStrings(string str1, string str2) {
return (str1+str2) == (str2 + str1) ? str1.substr(0, gcd( str1.size(), str2.size())) : "";
}