Related Articles

# Left Rotation and Right Rotation of a String

• Difficulty Level : Medium
• Last Updated : 14 Jun, 2021

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

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 :

## C++

 `// C program for Left Rotation and Right``// Rotation of a String``#include``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

 ``

Output:

```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 write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.