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:
C++
// C program for Left Rotation and Right // Rotation of a String #include<bits/stdc++.h> using namespace std; // In-place rotates s towards left by d void leftrotate(string &s, int d) { reverse(s.begin(), s.begin()+d); reverse(s.begin()+d, s.end()); reverse(s.begin(), s.end()); } // In-place rotates s towards right by d void rightrotate(string &s, int d) { leftrotate(s, s.length()-d); } // Driver code int main() { string str1 = "GeeksforGeeks"; leftrotate(str1, 2); cout << str1 << endl; string str2 = "GeeksforGeeks"; rightrotate(str2, 2); cout << str2 << endl; return 0; }
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