leetcode1071:字符串的最大公因子

理解題目的意思,給定的兩個字符串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()))  : "";
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章