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).
Examples:
Input : s = "Lazyroar"
d = 2
Output : Left Rotation : "eksforGeeksGe"
Right Rotation : "ksGeeksforGee"
Input : s = "qwertyu"
d = 2
Output : Left rotation : "ertyuqw"
Right rotation : "yuqwert"
Rotate string for string slicing
We have existing solution for this problem please refer Left Rotation and Right Rotation of a String link. We will solve this problem quickly in python using String Slicing. Approach is very simple,
- Separate string in two parts first & second, for Left rotation Lfirst = str[0 : d] and Lsecond = str[d :]. For Right rotation Rfirst = str[0 : len(str)-d] and Rsecond = str[len(str)-d : ].
- Now concatenate these two parts second + first accordingly.
Implementation:
Python3
# Function to rotate string left and right by d length def rotate( input ,d): # slice string in two parts for left and right Lfirst = input [ 0 : d] Lsecond = input [d :] Rfirst = input [ 0 : len ( input ) - d] Rsecond = input [ len ( input ) - d : ] # now concatenate two parts together print ( "Left Rotation : " , (Lsecond + Lfirst) ) print ( "Right Rotation : " , (Rsecond + Rfirst)) # Driver program if __name__ = = "__main__" : input = 'Lazyroar' d = 2 rotate( input ,d) |
Output:
Left Rotation : eksforGeeksGe
Right Rotation : ksGeeksforGee
Using extending the string
We use extended string to rotate the string. We will solve this problem quickly in python by slicing extended string. Approach is very simple,
Use extended string Extend_str, for Left rotation Lfirst = Extended_str[n : l1+n] . For Right rotation Rfirst = str[l1-n : l2-n].
Now print this string.
Implementation:
Python3
# Function to rotate string left and right by d length def rotate(str1,n): # Create the extended string and index of for rotation temp = str1 + str1 l1 = len (str1) l2 = len (temp) Lfirst = temp[n : l1 + n] Lfirst = temp[l1 - n : l2 - n] # now printing the string print ( "Left Rotation : " , Lfirst) print ( "Right Rotation : " , Lfirst ) # Driver program if __name__ = = "__main__" : input = 'Lazyroar' d = 2 rotate( input ,d) |
Left Rotation : ksGeeksforGee Right Rotation : ksGeeksforGee
String slicing in Python to Rotate a String Using deque
Take the input string s and the number of rotations d. Create a deque from the string s. Rotate the deque by d positions to the left or right using the rotate() method. Convert the deque back to a string using join() method and return the rotated string.
Algorithm
1. Take the input string s and the number of rotations d.
2. Create a deque from the string s.
3. If d is positive, rotate the deque to the left by d positions using the rotate() method.
If d is negative, rotate the deque to the right by -d positions using the rotate() method.
4. Convert the deque back to a string using join() method and return the rotated string.
Python3
from collections import deque def rotate_string(s, d): deq = deque(s) if d > 0 : deq.rotate( - d) else : deq.rotate( abs (d)) return ''.join(deq) s = 'Lazyroar' d = 2 left_rotated = rotate_string(s, d) right_rotated = rotate_string(s, - d) print ( "Left Rotation: " , left_rotated) print ( "Right Rotation: " , right_rotated) |
Left Rotation: eksforGeeksGe Right Rotation: ksGeeksforGee
Time complexity: O(n), where n is the length of the string s.
Auxiliary Space: O(n), where n is the length of the string s.