Skip to content
Related Articles

Related Articles

Left Rotation and Right Rotation of a String

Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 11 Jul, 2022
Improve Article
Save Article

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)

  1. 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;
}

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




<script>
 
// JavaScript program for Left Rotation and Right
// Rotation of a String
 
// Function that rotates s towards left by d
function leftrotate(str, d)
{
    var ans = str.substring(d, str.length) +
              str.substring(0, d);
    return ans;
}
 
// Function that rotates s towards right by d
function rightrotate(str, d)
{
    return leftrotate(str, str.length - d);
}
 
// Driver code
var str1 = "GeeksforGeeks";
document.write(leftrotate(str1, 2) + "<br>");
 
var str2 = "GeeksforGeeks";
document.write(rightrotate(str2, 2) + "<br>");
 
// This code is contributed by rdtank
 
</script>

Output

eksforGeeksGe
ksGeeksforGee

Time Complexity: O(N), where N is the size of the given string.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

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. 

The idea 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;
}

Java




// Java program for Left Rotation and Right
// Rotation of a String
import java.io.*;
import java.util.*;
 
class GFG {
 
  // Rotating the string using extended string
  static String leftrotate(String str1, int n)
  {
 
    // creating extended string and index for new
    // rotated string
    String temp = str1 + str1;
    int l1 = str1.length();
 
    String Lfirst = temp.substring(n, n + l1);
 
    // now returning  string
    return Lfirst;
  }
 
  // Rotating the string using extended string
  static String rightrotate(String str1, int n)
  {
    return leftrotate(str1, str1.length() - n);
  }
 
  // 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 Abhijeet Kumar(abhijeet19403)

Python3




# Python3 program for Left
# Rotation and Right
# Rotation of a String
 
def leftrotate(str1, n):
    # extended string
    temp = str1 + str1
    l = len(str1)
    # Return string
    return temp[n :l+n]
def rightrotate(str1, n):
    return leftrotate(str1, len(str1)-n)
     
    return temp[l-n : l1-n  ]
# Driver code
if __name__=="__main__":
     
    str1 = "GeeksforGeeks"
    print(leftrotate(str1, 2))
 
    str2 = "GeeksforGeeks"
    print(rightrotate(str2, 2))
 
# This code is contributed by sam snehil

C#




// C# program for Left Rotation and Right
// Rotation of a String
using System;
 
class GFG {
 
    // Rotating the string using extended string
    static String leftrotate(String str1, int n)
    {
 
        // creating extended string and index for new
        // rotated string
        String temp = str1 + str1;
        int l1 = str1.Length;
 
        String Lfirst = temp.Substring(n, l1);
 
        // now returning  string
        return Lfirst;
    }
 
    // Rotating the string using extended string
    static String rightrotate(String str1, int n)
    {
        return leftrotate(str1, str1.Length - n);
    }
 
    // 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 Abhijeet Kumar(abhijeet19403)

Javascript




// JavaScript program for Left Rotation and Right
// Rotation of a String
 
// Function that rotates string towards left by n
function leftrotate(str1, n)
{
    var temp = str1 + str1;
    var l1 = str1.length;
     
    var Lfirst = temp.substr(n,l1);
 
//      now returning  string
    return Lfirst;
}
 
// Function that rotates string towards right by n
function rightrotate(str, d)
{
    return leftrotate(str, str.length - d);
}
 
// Driver code
var str1 = "GeeksforGeeks";
console.log(leftrotate(str1, 2));
 
var str2 = "GeeksforGeeks";
console.log(rightrotate(str2, 2) );
 
// This code is contributed by sam snehil

Output

eksforGeeksGe
ksGeeksforGee

Time Complexity: O(N), where N is the size of the given string.
Auxiliary Space: O(n), where N is the size of the given string.

This article is contributed by Aart_Rathi and 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. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!