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()))  : "";
    }
发布了44 篇原创文章 · 获赞 51 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Hanghang_/article/details/104906066
今日推荐