 GeeksforGeeks App
Open App Browser
Continue

# C++ 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 :

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

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

## C++

 `// C++ program for Left Rotation and Right``// Rotation of a String``#include ``using` `namespace` `std;` `// Rotating the string using extended string``string leftrotate(string str1, ``int` `n)``{` `    ``// creating extended string and index for new rotated``    ``// string``    ``string temp = str1 + str1;``    ``int` `l1 = str1.size();` `    ``string Lfirst = temp.substr(n, l1);` `    ``//     now returning string``    ``return` `Lfirst;``}``// Rotating the string using extended string``string rightrotate(string str1, ``int` `n)``{` `    ``return` `leftrotate(str1, str1.size() - n);``}` `// Driver code``int` `main()``{``    ``string str1 = leftrotate(``"GeeksforGeeks"``, 2);``    ``cout << str1 << endl;` `    ``string str2 = rightrotate(``"GeeksforGeeks"``, 2);``    ``cout << str2 << endl;``    ``return` `0;``}` `// 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)

### Method 3:

This approach defines two functions for left and right rotation of a string using the rotate() function provided by the STL (Standard Template Library) in C++. The left_rotate_string() function rotates the string s by d positions to the left, while the right_rotate_string() function rotates the string s by d positions to the right. Both functions return the rotated string.

#### Approach:

The approach is

1. Define two functions: left_rotate_string() and right_rotate_string().
2. In left_rotate_string(), perform a left rotation on the string s by d elements using the rotate() function.
3. In right_rotate_string(), perform a right rotation on the string s by d elements using the rotate() function.
4. Return the rotated string.

Below is the implementation of the above approach:

## C++

 `// CPP program for Left Rotation and Right``// Rotation of a String``#include ``#include ` `using` `namespace` `std;` `// Define the left_rotate_string function``string left_rotate_string(string s, ``int` `d)``{``    ``// Perform a left rotation on the string by d elements``    ``rotate(s.begin(), s.begin() + d, s.end());` `    ``return` `s;``}` `// Define the right_rotate_string function``string right_rotate_string(string s, ``int` `d)``{``    ``// Perform a right rotation on the string by d elements``    ``rotate(s.rbegin(), s.rbegin() + d, s.rend());` `    ``return` `s;``}` `int` `main()``{``    ``string s = ``"GeeksforGeeks"``;``    ``int` `d = 2;``    ``cout << ``"Left Rotation: "` `<< left_rotate_string(s, d)``         ``<< endl;``    ``cout << ``"Right Rotation: "` `<< right_rotate_string(s, d)``         ``<< endl;` `    ``s = ``"qwertyu"``;``    ``d = 2;``    ``cout << ``"Left Rotation: "` `<< left_rotate_string(s, d)``         ``<< endl;``    ``cout << ``"Right Rotation: "` `<< right_rotate_string(s, d)``         ``<< endl;` `    ``return` `0;``}` `// This code is contributed by Susobhan Akhuli`

Output

```Left Rotation: eksforGeeksGe
Right Rotation: ksGeeksforGee
Left Rotation: ertyuqw
Right Rotation: yuqwert```

Time complexity: O(n), where n is the length of the input string s. This is because the rotation operation requires visiting every character in the string exactly once.
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