Given a string of size n, write functions to perform following operations on string.
- Left (Or anticlockwise) rotate the given string by d elements (where d <= n)
- Right (Or clockwise) rotate the given string by d elements (where d <= n).
Input : s = "GeeksforGeeks" d = 2 Output : Left Rotation : "eksforGeeksGe" Right Rotation : "ksGeeksforGee" Input : s = "qwertyu" d = 2 Output : Left rotation : "ertyuqw" Right rotation : "yuqwert"
A Simple Solution is to use a temporary string to do rotations. For left rotation, first copy last n-d characters, then copy first d characters in order to the temporary string. For right rotation, first copy last d characters, then copy n-d characters.
Can we do both rotations in-place and O(n) time?
The idea is based on reversal algorithm for rotation.
// 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)
Below is the implementation of above steps :
Left rotation: eksforGeeksGe Right rotation: ksGeeksforGee
This article is contributed by Rishabh Jain. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Left rotation of an array using vectors in C++
- Print left rotation of array in O(n) time and O(1) space
- Check if a given string is a rotation of a palindrome
- Lexicographically minimum string rotation | Set 1
- Queries for rotation and Kth character of the given string in constant time
- Program for array rotation
- Reversal algorithm for right rotation of an array
- Clockwise rotation of Linked List
- Circular rotation of an array using deque in C++
- Reversal algorithm for array rotation
- Find a rotation with maximum hamming distance
- Block swap algorithm for array rotation
- C Program for Reversal algorithm for array rotation
- Maximize count of corresponding same elements in given Arrays by Rotation
- Find the Rotation Count in Rotated Sorted array
- Java Program for Reversal algorithm for array rotation
- Minimum length of substring whose rotation generates a palindromic substring
- Check if left and right shift of any string results into given string
- String formed with middle character of every right substring followed by left sequentially
- Maximize count of 0s in left and 1s in right substring by splitting given Binary string