Solución al Ejercicio: Verificar rotación de cadena
📋 Copiar código
def verificar_rotacion_cadena(s1, s2):
"""
Verifica si una cadena es una rotación de otra.
Args:
s1: La primera cadena.
s2: La segunda cadena.
Returns:
True si s2 es una rotación de s1, False en caso contrario.
"""
if len(s1) != len(s2) or not s1:
return False
cadena_doble = s1 + s1
return s2 in cadena_doble
# Ejemplos de uso
cadena1_a = "waterbottle"
cadena1_b = "erbottlewat"
print(f"'{cadena1_b}' es rotación de '{cadena1_a}': {verificar_rotacion_cadena(cadena1_a, cadena1_b)}")
cadena2_a = "abcde"
cadena2_b = "cdeab"
print(f"'{cadena2_b}' es rotación de '{cadena2_a}': {verificar_rotacion_cadena(cadena2_a, cadena2_b)}")
cadena3_a = "abcde"
cadena3_b = "abced"
print(f"'{cadena3_b}' es rotación de '{cadena3_a}': {verificar_rotacion_cadena(cadena3_a, cadena3_b)}")
cadena4_a = "a"
cadena4_b = "a"
print(f"'{cadena4_b}' es rotación de '{cadena4_a}': {verificar_rotacion_cadena(cadena4_a, cadena4_b)}")
cadena5_a = ""
cadena5_b = ""
print(f"'{cadena5_b}' es rotación de '{cadena5_a}': {verificar_rotacion_cadena(cadena5_a, cadena5_b)}")
cadena6_a = "abc"
cadena6_b = "abcd"
print(f"'{cadena6_b}' es rotación de '{cadena6_a}': {verificar_rotacion_cadena(cadena6_a, cadena6_b)}")
Explicación del Código:
-
Definición de la función
verificar_rotacion_cadena(s1, s2)
:
- Se define una función llamada
verificar_rotacion_cadena
que toma dos cadenas, s1
y
s2
, como argumentos.
-
Verificación de longitud y cadena no
vacía:
if len(s1) != len(s2) or not s1:
:
- Primero, se verifica si las
longitudes de ambas cadenas son diferentes. Si lo son,
s2
no puede ser una rotación de s1
, por lo que se devuelve
False
.
- Segundo, se verifica si
s1
está vacía. Si lo está, y dado que ya se verificó que las longitudes
son iguales, s2
también debe estar vacía, en cuyo caso
es una rotación de sí misma (o no una rotación válida según la
definición estricta para cadenas no vacías). Sin embargo, para
simplificar, si ambas son vacías, la función devolverá True
implícitamente en el siguiente paso. Si solo s1
está
vacía y s2
no, la longitud no coincidirá y se devolverá
False
.
-
Concatenación de la primera cadena
consigo misma:
cadena_doble = s1 + s1
: Se
crea una nueva cadena cadena_doble
concatenando la cadena
s1
consigo misma. Por ejemplo, si s1
es "waterbottle",
cadena_doble
será "waterbottlewaterbottle".
-
Verificación de la presencia de la
segunda cadena en la cadena doble:
return s2 in cadena_doble
:
Se verifica si la cadena s2
es una subcadena de
cadena_doble
utilizando el operador in
. La lógica
detrás de esto es que si s2
es una rotación de s1
,
entonces s2
siempre estará presente como una subcadena
dentro de la concatenación de s1
consigo misma. Por
ejemplo, si s1
es "waterbottle" y s2
es
"erbottlewat", "erbottlewat" se encuentra dentro de
"waterbottlewaterbottle".
-
Retorno del resultado booleano:
- La función devuelve
True
si
s2
se encuentra como una subcadena en cadena_doble
,
lo que indica que es una rotación de s1
, y False
en caso contrario.
-
Ejemplos de uso:
- Se proporcionan varios ejemplos de
pares de cadenas para probar la función, incluyendo casos donde la
segunda cadena es una rotación de la primera, donde no lo es, y casos
con cadenas vacías y de un solo carácter.