原题

https://leetcode-cn.com/problems/greatest-common-divisor-of-strings/

解题思路

当 str1 与 str2 存在非空的 X 为最大公因子时,

  • 假设 str1 = nX, str2 = mX
    str1 + str2 = (n+m)*X = str2 + str1

代码

/**
 * @param {string} str1
 * @param {string} str2
 * @return {string}
 */
const gcd = (a, b) => (a % b === 0 ? b : gcd(b, a%b));

var gcdOfStrings = function(str1, str2) {
    if (str1 + str2 !== str2 + str1) return '';
    if (str1.length > str2.length) {
        return str2.substring(0, gcd(str1.length, str2.length));
    }
    return str1.substring(0, gcd(str2.length, str1.length));
};

复杂度

  • 时间复杂度 O(N)
  • 空间复杂度 O(N)