Leetcode
1071. Greatest Common Divisor of Strings

1071. Greatest Common Divisor of Strings

Description

For two strings s and t, we say "t divides s" if and only if s = t + t + t + ... + t + t (i.e., t is concatenated with itself one or more times).

Given two strings str1 and str2, return the largest string x such that x divides both str1 and str2.

Example 1:

  Input: str1 = "ABCABC", str2 = "ABC"
  Output: "ABC"

Example 2:

  Input: str1 = "ABABAB", str2 = "ABAB"
  Output: "AB"

Example 3:

  Input: str1 = "LEET", str2 = "CODE"
  Output: ""

Solution from others

 
/**
 * @param {string} str1
 * @param {string} str2
 * @return {string}
 */
var gcdOfStrings = function(str1, str2) {
  // if the two strings are not equal, then return empty string
  if (str1 + str2 !== str2 + str1) {
      return '';
  }
 
  // Find the greatest common divisor of the two strings using Euclidean algorithm
  // Replacing the divisor with the remainder and repeating this until the remainder is zero
  // If remainder equals 0 then it is the GCD of the two numbers
  const gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));
 
  // return the substring of the first string from 0 to the gcd of the two strings
  return str1.slice(0, gcd(str1.length, str2.length));
};