Dada una string de tamaño n, escriba funciones para realizar las siguientes operaciones en una string:
- Gire a la izquierda (o en sentido contrario a las agujas del reloj) la string dada por d elementos (donde d <= n)
- A la derecha (o en el sentido de las agujas del reloj) gire la string dada por d elementos (donde d <= n).
Ejemplos:
Input : s = "GeeksforGeeks" d = 2 Output : Left Rotation : "eksforGeeksGe" Right Rotation : "ksGeeksforGee" Input : s = "qwertyu" d = 2 Output : Left rotation : "ertyuqw" Right rotation : "yuqwert"
Una solución simple es usar una string temporal para hacer rotaciones. Para la rotación a la izquierda, primero, copie los últimos caracteres nd, luego copie los primeros caracteres d en la string temporal. Para la rotación a la derecha, primero, copie los últimos caracteres d, luego copie los caracteres nd.
¿Podemos hacer ambas rotaciones en el lugar y en tiempo O(n)?
La idea se basa en un algoritmo de inversión para la rotación .
// Left rotate string s by d (Assuming d <= n) leftRotate(s, d) reverse(s, 0, d-1); // Reverse substring s[0..d-1] reverse(s, d, n-1); // Reverse substring s[d..n-1] reverse(s, 0, n-1); // Reverse whole string. // Right rotate string s by d (Assuming d <= n) rightRotate(s, d) // We can also call above reverse steps // with d = n-d. leftRotate(s, n-d)
A continuación se muestra la implementación de los pasos anteriores:
Python3
# Python3 program for Left # Rotation and Right # Rotation of a String # In-place rotates s towards left by d def leftrotate(s, d): tmp = s[d : ] + s[0 : d] return tmp # In-place rotates s # towards right by d def rightrotate(s, d): return leftrotate(s, len(s) - d) # Driver code if __name__=="__main__": str1 = "GeeksforGeeks" print(leftrotate(str1, 2)) str2 = "GeeksforGeeks" print(rightrotate(str2, 2)) # This code is contributed by Rutvik_56
Producción:
Left rotation: eksforGeeksGe Right rotation: ksGeeksforGee
Complejidad de tiempo: O(N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O(N) tiempo
Espacio auxiliar: O(1), ya que no estamos usando ningún espacio adicional.
Consulte el artículo completo sobre Rotación a la izquierda y Rotación a la derecha de una string para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA