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

• Difficulty Level : Easy
• Last Updated : 31 Mar, 2022

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 :

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

Output:

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

Time Complexity: O(N)

Auxiliary Space: O(1)

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

My Personal Notes arrow_drop_up