Rotación a la izquierda y rotación a la derecha de una string

Dada una string de tamaño n, escriba funciones para realizar las siguientes operaciones en una string:

Gire a la izquierda (o en sentido contrario a las agujas del reloj) la string dada por d elementos (donde d <= n)

  1. A la derecha (o en el sentido de las agujas del reloj) gire la string dada por d elementos (donde d <= n).

Ejemplos: 

Input : s = "GeeksforGeeks"
        d = 2
Output : Left Rotation  : "eksforGeeksGe" 
         Right Rotation : "ksGeeksforGee"  


Input : s = "qwertyu" 
        d = 2
Output : Left rotation : "ertyuqw"
         Right rotation : "yuqwert"

Método n. ° 1: una solución simple es usar una string temporal para hacer rotaciones. Para la rotación a la izquierda, primero, copie los últimos caracteres nd, luego copie los primeros caracteres d en la string temporal. Para la rotación a la derecha, primero, copie los últimos caracteres d, luego copie los caracteres nd. 

¿Podemos hacer ambas rotaciones en el lugar y en tiempo O(n)?  
La idea se basa en un algoritmo de inversión para la rotación .

// 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)  

A continuación se muestra la implementación de los pasos anteriores: 

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>
Producción

eksforGeeksGe
ksGeeksforGee

Complejidad de tiempo: O(N), donde N es el tamaño de la string dada.
Espacio auxiliar: O(1) , no se requiere espacio adicional, por lo que es una constante.

Método #2: Podemos usar una string extendida que tiene el doble de tamaño que una string normal para rotar la string. Para la rotación a la izquierda, acceda a la string extendida desde el índice n hasta el índice len(string) + n. Para la rotación a la derecha, gire la cuerda a la izquierda con lugares de tamaño d. 

la idea es 

// 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)

A continuación se muestra la implementación del enfoque anterior.

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
Producción

eksforGeeksGe
ksGeeksforGee

Complejidad de tiempo: O(N), donde N es el tamaño de la string dada.
Espacio auxiliar: O(n) , donde N es el tamaño de la string dada.

Este artículo es una contribución de Aart_Rathi y Rishabh Jain . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *