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"
Método n. ° 1: 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; }
Java
// Java program for Left Rotation and Right // Rotation of a String import java.util.*; import java.io.*; class GFG { // function that rotates s towards left by d static String leftrotate(String str, int d) { String ans = str.substring(d) + str.substring(0, d); return ans; } // function that rotates s towards right by d static String rightrotate(String str, int d) { return leftrotate(str, str.length() - d); } // Driver code public static void main(String args[]) { String str1 = "GeeksforGeeks"; System.out.println(leftrotate(str1, 2)); String str2 = "GeeksforGeeks"; System.out.println(rightrotate(str2, 2)); } } // This code is contributed by rachana soma
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
C#
// C# program for Left Rotation and Right // Rotation of a String using System; class GFG { // function that rotates s towards left by d static String leftrotate(String str, int d) { String ans = str.Substring(d,str.Length-d) + str.Substring(0, d); return ans; } // function that rotates s towards right by d static String rightrotate(String str, int d) { return leftrotate(str, str.Length - d); } // Driver code public static void Main(String []args) { String str1 = "GeeksforGeeks"; Console.WriteLine(leftrotate(str1, 2)); String str2 = "GeeksforGeeks"; Console.WriteLine(rightrotate(str2, 2)); } } /* This code is contributed by PrinciRaj1992 */
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>
eksforGeeksGe ksGeeksforGee
Complejidad de tiempo: O(N), donde N es el tamaño de la string dada.
Espacio auxiliar: O(1) , no se requiere espacio adicional, por lo que es una constante.
Método #2: Podemos usar una string extendida que tiene el doble de tamaño que una string normal para rotar la string. Para la rotación a la izquierda, acceda a la string extendida desde el índice n hasta el índice len(string) + n. Para la rotación a la derecha, gire la cuerda a la izquierda con lugares de tamaño d.
la idea es
// Left rotate string s by d leftRotate(s, n) temp = s + s; // extended string l1 = s.length // length of string return temp[n : l1+n] //return rotated string. // Right rotate string s by n rightRotate(s, n) // We can also call above reverse steps // with x = s.length - n. leftRotate(s, x-n)
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ program for Left Rotation and Right // Rotation of a String #include <bits/stdc++.h> using namespace std; // Rotating the string using extended string string leftrotate(string str1, int n) { // creating extended string and index for new rotated // string string temp = str1 + str1; int l1 = str1.size(); string Lfirst = temp.substr(n, l1); // now returning string return Lfirst; } // Rotating the string using extended string string rightrotate(string str1, int n) { return leftrotate(str1, str1.size() - n); } // Driver code int main() { string str1 = leftrotate("GeeksforGeeks", 2); cout << str1 << endl; string str2 = rightrotate("GeeksforGeeks", 2); cout << str2 << endl; return 0; }
Java
// Java program for Left Rotation and Right // Rotation of a String import java.io.*; import java.util.*; class GFG { // Rotating the string using extended string static String leftrotate(String str1, int n) { // creating extended string and index for new // rotated string String temp = str1 + str1; int l1 = str1.length(); String Lfirst = temp.substring(n, n + l1); // now returning string return Lfirst; } // Rotating the string using extended string static String rightrotate(String str1, int n) { return leftrotate(str1, str1.length() - n); } // Driver code public static void main(String args[]) { String str1 = "GeeksforGeeks"; System.out.println(leftrotate(str1, 2)); String str2 = "GeeksforGeeks"; System.out.println(rightrotate(str2, 2)); } } // This code is contributed by Abhijeet Kumar(abhijeet19403)
Python3
# Python3 program for Left # Rotation and Right # Rotation of a String def leftrotate(str1, n): # extended string temp = str1 + str1 l = len(str1) # Return string return temp[n :l+n] def rightrotate(str1, n): return leftrotate(str1, len(str1)-n) return temp[l-n : l1-n ] # Driver code if __name__=="__main__": str1 = "GeeksforGeeks" print(leftrotate(str1, 2)) str2 = "GeeksforGeeks" print(rightrotate(str2, 2)) # This code is contributed by sam snehil
C#
// C# program for Left Rotation and Right // Rotation of a String using System; class GFG { // Rotating the string using extended string static String leftrotate(String str1, int n) { // creating extended string and index for new // rotated string String temp = str1 + str1; int l1 = str1.Length; String Lfirst = temp.Substring(n, l1); // now returning string return Lfirst; } // Rotating the string using extended string static String rightrotate(String str1, int n) { return leftrotate(str1, str1.Length - n); } // Driver code public static void Main(String[] args) { String str1 = "GeeksforGeeks"; Console.WriteLine(leftrotate(str1, 2)); String str2 = "GeeksforGeeks"; Console.WriteLine(rightrotate(str2, 2)); } } // This code is contributed by Abhijeet Kumar(abhijeet19403)
Javascript
// JavaScript program for Left Rotation and Right // Rotation of a String // Function that rotates string towards left by n function leftrotate(str1, n) { var temp = str1 + str1; var l1 = str1.length; var Lfirst = temp.substr(n,l1); // now returning string return Lfirst; } // Function that rotates string towards right by n function rightrotate(str, d) { return leftrotate(str, str.length - d); } // Driver code var str1 = "GeeksforGeeks"; console.log(leftrotate(str1, 2)); var str2 = "GeeksforGeeks"; console.log(rightrotate(str2, 2) ); // This code is contributed by sam snehil
eksforGeeksGe ksGeeksforGee
Complejidad de tiempo: O(N), donde N es el tamaño de la string dada.
Espacio auxiliar: O(n) , donde N es el tamaño de la string dada.
Este artículo es una contribución de Aart_Rathi y Rishabh Jain . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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