1 usuario conectado

Verificar rotación de cadena. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada verificar_rotacion_cadena que tome dos cadenas como entrada y devuelva True si la segunda cadena es una rotación de la primera cadena. Una rotación de una cadena ocurre cuando se desplazan los caracteres de la cadena original hacia la izquierda o hacia la derecha, y los caracteres que se "salen" por un extremo vuelven a entrar por el otro. Por ejemplo, "waterbottle" es una rotación de "erbottlewat".



Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. 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.
  2. 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.
  3. 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".
  4. 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".
  5. 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.
  6. 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.