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

• Difficulty Level : Easy
• Last Updated : 27 May, 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), 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.

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :