 GeeksforGeeks App
Open App Browser
Continue

# Python3 Program for Left Rotation and Right Rotation of a String

Given a string of size n, write functions to perform the following operations on a string-

1. Left (Or anticlockwise) rotate the given string by d elements (where d <= n)
2. Right (Or clockwise) rotate the given string by d elements (where d <= n).

Examples:

```Input : s = "GeeksforGeeks"
d = 2
Output : Left Rotation  : "eksforGeeksGe"
Right Rotation : "ksGeeksforGee"

Input : s = "qwertyu"
d = 2
Output : Left rotation : "ertyuqw"
Right rotation : "yuqwert"```

### Method 1:

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 a 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 the above steps :

## 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`

Output:

```Left rotation:  eksforGeeksGe
Right rotation:  ksGeeksforGee                 ```

Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time
Auxiliary Space: O(1), as we are not using any extra space.

### Method 2:

We can use extended string which is double in size of normal string to rotate string. For left rotation, access the extended string from index n to the index len(string) + n. For right rotation, rotate the string left with size-d places.

#### Approach:

The approach is

```// 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)```

Below is implementation of above approach:

## 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 Susobhan Akhuli`

Output

```eksforGeeksGe
ksGeeksforGee```

Time Complexity: O(N), where N is the size of the given string.
Auxiliary Space: O(N)

Please refer complete article on Left Rotation and Right Rotation of a String for more details!

My Personal Notes arrow_drop_up