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