Máximo Común Divisor de Cadenas - Leetcode 1071


Descripción

Ejemplo 1

Entrada: str1 = "ABCABC", str2 = "ABC"
Salida: "ABC"

Ejemplo 2:

Entrada: str1 = "ABABAB", str2 = "ABAB"
Salida: "AB"

Ejemplo 3:

Entrada: str1 = "LEET", str2 = "CODE"
Salida: ""

Restricciones:

  • 1 <= str1.length, str2.length <= 1000
  • str1 and str2 consist of English uppercase letters.

Solución

Mostrar solución
class Solution:
    def check_div(self, current_dividend, current_divisor):
        for ss in current_dividend.split(current_divisor):
            if ss:
                return False

        return True

    def gcdOfStrings(self, str1: str, str2: str) -> str:
        if str1 >= str2:
            dividend = str1
            divisor = str2
        else:
            dividend = str2
            divisor = str1

        div_len = len(divisor)
        for i in range(div_len):
            current_divisor = divisor[0:div_len - i]

            if self.check_div(divisor, current_divisor) and self.check_div(dividend, current_divisor):
                return current_divisor

        return ''

Solución Óptima

class Solution:
    def gcdOfStrings(self, str1: str, str2: str) -> str:
        # Verificar si existe una cadena MC de longitud mayor a 0.
        if str1 + str2 != str2 + str1:
            return ""

        # Obtener el MCD de las 2 longitudes.
        max_length = gcd(len(str1), len(str2))
        return str1[:max_length]

Solución en Google Colab Probar Solución

-

Live Resolviendo el Ejercicio

Fuente del ejercicio: https://leetcode.com/problems/greatest-common-divisor-of-strings