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:
Javascript
<script> // JavaScript program for Left Rotation and Right // Rotation of a String // Function that rotates s towards left by d function leftrotate(str, d) { var ans = str.substring(d, str.length) + str.substring(0, d); return ans; } // Function that rotates s towards right by d function rightrotate(str, d) { return leftrotate(str, str.length - d); } // Driver code var str1 = "GeeksforGeeks"; document.write(leftrotate(str1, 2) + "<br>"); var str2 = "GeeksforGeeks"; document.write(rightrotate(str2, 2) + "<br>"); // This code is contributed by rdtank </script>
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