理解題目的意思,給定的兩個字符串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())) : "";
}