C++ Program for Left Rotation and Right Rotation of a String
Last Updated :
07 May, 2023
Given a string of size n, write functions to perform the following operations on a string-
- Left (Or anticlockwise) rotate the given string by d elements (where d <= n)
- 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<bits/stdc++.h>
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 <bits/stdc++.h>
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
OutputeksforGeeksGe
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
- Define two functions: left_rotate_string() and right_rotate_string().
- In left_rotate_string(), perform a left rotation on the string s by d elements using the rotate() function.
- In right_rotate_string(), perform a right rotation on the string s by d elements using the rotate() function.
- 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 <algorithm>
#include <iostream>
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
OutputLeft 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!
Similar Reads
Javascript 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-Left (Or anticlockwise) rotate the given string by d elements (where d <= n)Right (Or clockwise) rotate the given string by d elements (where d <= n).Examples: Input : s = "GeeksforGeeks" d = 2Output : Le
3 min read
Left Rotation of a String Given a string s and an integer d, the task is to left rotate the string by d positions.Examples:Input: s = "GeeksforGeeks", d = 2Output: "eksforGeeksGe" Explanation: After the first rotation, string s becomes "eeksforGeeksG" and after the second rotation, it becomes "eksforGeeksGe".Input: s = "qwer
15+ min read
Maximum product of first and last character of String after rotation Given a string S of length N, the task is to find the maximum possible product of the first and the last character of the string if it is rotated any number of times toward left or right. Examples: Input: Str = "12345" Output: 20Explanation: If we rotate the string once in anticlockwise direction, t
4 min read
Check if Strings Are Rotations of Each Other Given two string s1 and s2 of same length, the task is to check whether s2 is a rotation of s1.Examples: Input: s1 = "abcd", s2 = "cdab"Output: trueExplanation: After 2 right rotations, s1 will become equal to s2.Input: s1 = "aab", s2 = "aba"Output: trueExplanation: After 1 left rotation, s1 will be
15+ min read
Minimize characters to be changed to make the left and right rotation of a string same Given a string S of lowercase English alphabets, the task is to find the minimum number of characters to be changed such that the left and right rotation of the string are the same. Examples: Input: S = âabcdâOutput: 2Explanation:String after the left shift: âbcdaâString after the right shift: âdabc
8 min read
Javascript Program to Check if strings are rotations of each other or not | Set 2 Given two strings s1 and s2, check whether s2 is a rotation of s1. Examples: Input : ABACD, CDABAOutput : TrueInput : GEEKS, EKSGEOutput : TrueWe have discussed an approach in earlier post which handles substring match as a pattern. In this post, we will be going to use KMP algorithm's lps (longest
2 min read