Complejidad del tiempo: En el peor de los casos, iteramos sobre Min(str1,str2) y necesitamos recrear str1 y str2 para que sean (str1.length str2.length), por lo que la complejidad del tiempo general será O(min(str1,str2) * (str1.length str2.length))
Complejidad del espacio: O(1) ya que no necesitamos ningún espacio adicional.
","image":"http://www.luping.net/uploads/20241012/1728725766670a43065f5b5.jpg","datePublished":"2024-11-07T22:30:30+08:00","dateModified":"2024-11-07T22:30:30+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}Para dos cadenas s y t, decimos "t divide a s" si y sólo si s = t t t ... t t (es decir, t está concatenado consigo mismo una o más veces).
Dadas dos cadenas str1 y str2, devuelve la cadena más grande x tal que x divide tanto str1 como str2.
Aunque el leetcode lo marcó como un problema fácil, debo admitir que me resultó difícil encontrar una solución de inmediato.
Permítanme revisar los casos de prueba proporcionados por leetcode y repasarlos para explicar mi confusión.
Entrada: str1 = "ABCABC", str2 = "ABC"
Salida: "ABC"Entrada: str1 = "ABABAB", str2 = "ABAB"
Salida: "AB"
A partir del enunciado del problema y del caso de prueba 1, determiné que necesitamos generar la cadena más grande ("ABC") concatenando la cual podemos obtener ambas cadenas. (cadena predeterminada "ABC" === str2 y "ABC" "ABC" === str1).
Sin embargo, al observar el caso de prueba 2, rápidamente me di cuenta de que mi comprensión no era correcta, ya que de acuerdo con eso debería generar "ABAB", ya que esa es la cadena más larga con la que puedo crear ambas cadenas. Pero salté al código y comencé a idear una solución. (¿Error de novato?)
Solo pude idear una solución donde:
Como puede ver, mi solución falló para las cadenas donde str1 contiene str2 pero también contiene algunos otros caracteres adicionales. violando el requisito de que s = t t ... t t.
Tuve que recurrir a la solución de neetcode en busca de ayuda. Entendí rápidamente mis problemas:
Estaba encontrando el MCD de la longitud de la cadena, NO la cadena en sí. Necesito encontrar una cadena donde, repitiendo esas cadenas, pueda crear ambas cadenas sin ningún carácter restante.
Me di cuenta de por qué "ABAB" no puede ser la respuesta para el caso de prueba 2:
Necesitamos encontrar x tal que divida ambas cadenas por igual. entonces, tomando "ABAB" como cadena puedes crear str2 completamente, pero para str1 terminas con "ABABABAB". Terminas con 2 "AB" sobrantes y no puedes decir que creaste str1 completamente combinando x.
"ABAB" longitud 4 y "ABABAB" longitud 6. El MCD de las 2 cadenas = 2. Por lo tanto, la salida debe ser una cadena de longitud 2.
Complejidad del tiempo: En el peor de los casos, iteramos sobre Min(str1,str2) y necesitamos recrear str1 y str2 para que sean (str1.length str2.length), por lo que la complejidad del tiempo general será O(min(str1,str2) * (str1.length str2.length))
Complejidad del espacio: O(1) ya que no necesitamos ningún espacio adicional.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3