Modificar una string realizando operaciones de cambio dadas

Dada una string S que contiene alfabetos ingleses en minúsculas y una array shift[][] que consta de pares de la forma {direction, cantidad} , donde la dirección puede ser 0 (para desplazamiento a la izquierda) o 1 (para desplazamiento a la derecha) y la cantidad es el número de índices por los que se requiere desplazar la string S. La tarea es devolver la string modificada que se puede obtener después de realizar las operaciones dadas.

Nota: Un desplazamiento a la izquierda de 1 se refiere a eliminar el primer carácter de S y agregarlo al final. De manera similar, un desplazamiento a la derecha de 1 se refiere a eliminar el último carácter de S e insertarlo al principio.

Ejemplos

Entrada : S = “abc”, shift[][] = {{0, 1}, {1, 2}}
Salida: cab
Explicación: 
[0, 1] se refiere a desplazar S[0] a la izquierda en 1. Por lo tanto, la string S se modifica de “abc” a “bca”.
[1, 2] se refiere a desplazar S[0] a la derecha en 1. Por lo tanto, la string S se modifica de «bca» a «cab».

Entrada: S = “abcdefg”, shift[][] = { {1, 1}, {1, 1}, {0, 2}, {1, 3} }
Salida: efgabcd
Explicación:  
[1, 1] se refiere a desplazar S[0] a la derecha en 1. Por lo tanto, la string S se modifica de «abcdefg» a «gabcdef».
[1, 1] se refiere a desplazar S[0] a la derecha en 1. Por lo tanto, la string S se modifica de «gabcdef» a «fgabcde».
[0, 2] se refiere a desplazar S[0] a la izquierda en 2. Por lo tanto, la string S se modifica de «fgabcde» a «abcdefg».
[1, 3] se refiere a desplazar S[0] a la derecha en 3. Por lo tanto, la string S se modifica de «abcdefg» a «efgabcd».

 

Enfoque ingenuo: el enfoque más simple para resolver el problema es atravesar la array shift[][] y desplazar S[0] por cantidad de índices en la dirección especificada. Después de completar todas las operaciones de cambio, imprima la string final obtenida.

Tiempo Complejidad: O(N 2 )
Espacio auxiliar: O(N)

Enfoque eficiente: para optimizar el enfoque anterior, siga los pasos a continuación:

  • Inicialice una variable, digamos val, para almacenar los turnos efectivos.
  • Recorra la array shift[][] y realice las siguientes operaciones en cada i -ésima fila:
  • Si shift[i][0] = 0 ( desplazamiento a la izquierda ) , entonces disminuya val en -shift[i][1].
  • De lo contrario ( desplazamiento a la izquierda ), aumente val por shift[i][1].
  • Actualice val = val % len (para optimizar aún más los turnos efectivos).
  • Inicialice una string , resultado = “” , para almacenar la string modificada.
  • Ahora, comprueba si val > 0 . Si se determina que es cierto, realice la rotación correcta en la string mediante val .
  • De lo contrario, realice la rotación a la izquierda de la string mediante |val| Monto.
  • Imprime el resultado.

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

C++

// C++ implementation
// of above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the string obtained
// after performing given shift operations
void stringShift(string s,
                 vector<vector<int> >& shift)
{
 
    int val = 0;
 
    for (int i = 0; i < shift.size(); ++i)
 
        // If shift[i][0] = 0, then left shift
        // Otherwise, right shift
        val += shift[i][0] == 0
                   ? -shift[i][1]
                   : shift[i][1];
 
    // Stores length of the string
    int len = s.length();
 
    // Effective shift calculation
    val = val % len;
 
    // Stores modified string
    string result = "";
 
    // Right rotation
    if (val > 0)
        result = s.substr(len - val, val)
                 + s.substr(0, len - val);
 
    // Left rotation
    else
        result
            = s.substr(-val, len + val)
              + s.substr(0, -val);
 
    cout << result;
}
 
// Driver Code
int main()
{
    string s = "abc";
    vector<vector<int> > shift = {
        { 0, 1 },
        { 1, 2 }
    };
 
    stringShift(s, shift);
 
    return 0;
}

Java

// Java implementation
// of above approach
import java.io.*;
class GFG
{
 
  // Function to find the string obtained
  // after performing given shift operations
  static void stringShift(String s, int[][] shift)
  {
    int val = 0;
    for (int i = 0; i < shift.length; ++i)
 
      // If shift[i][0] = 0, then left shift
      // Otherwise, right shift
      if (shift[i][0] == 0)
        val -= shift[i][1];
    else
      val += shift[i][1];
 
    // Stores length of the string
    int len = s.length();
 
    // Effective shift calculation
    val = val % len;
 
    // Stores modified string
    String result = "";
 
    // Right rotation
    if (val > 0)
      result = s.substring(len - val, (len - val) + val)
      + s.substring(0, len - val);
 
    // Left rotation
    else
      result = s.substring(-val, len + val)
      + s.substring(0, -val);
 
    System.out.println(result);
  }
 
  // Driver Code
  public static void main(String[] args)
  {
    String s = "abc";
    int[][] shift
      = new int[][] {{ 0, 1 }, { 1, 2 }};
 
    stringShift(s, shift);
  }
}
 
// This code is contributed by Dharanendra L V

C#

// C# implementation
// of above approach
using System;
 
public class GFG
{
 
  // Function to find the string obtained
  // after performing given shift operations
  static void stringShift(String s, int[,] shift)
  {
    int val = 0;
    for (int i = 0; i < shift.GetLength(0); ++i)
 
      // If shift[i,0] = 0, then left shift
      // Otherwise, right shift
      if (shift[i,0] == 0)
        val -= shift[i, 1];
    else
      val += shift[i, 1];
 
    // Stores length of the string
    int len = s.Length;
 
    // Effective shift calculation
    val = val % len;
 
    // Stores modified string
    String result = "";
 
    // Right rotation
    if (val > 0)
      result = s.Substring(len - val, val)
      + s.Substring(0, len - val);
 
    // Left rotation
    else
      result = s.Substring(-val, len)
      + s.Substring(0, -val);
 
    Console.WriteLine(result);
  }
 
  // Driver Code
  public static void Main(String[] args)
  {
    String s = "abc";
    int[,] shift
      = new int[,] {{ 0, 1 }, { 1, 2 }};
 
    stringShift(s, shift);
  }
}
 
// This code contributed by shikhasingrajput

Python3

# Python implementation
# of above approach
 
# Function to find the string obtained
# after performing given shift operations
def stringShift(s, shift):
    val = 0
    for i in range(len(shift)):
 
        # If shift[i][0] = 0, then left shift
        # Otherwise, right shift
        val += -shift[i][1] if shift[i][0] == 0 else shift[i][1]
 
    # Stores length of the string
    Len = len(s)
 
    # Effective shift calculation
    val = val % Len
 
    # Stores modified string
    result = ""
 
    # Right rotation
    if (val > 0):
        result = s[Len - val:Len] + s[0: Len - val]
 
    # Left rotation
    else:
        result = s[-val: Len] + s[0: -val]
 
    print(result)
 
# Driver Code
s = "abc"
shift = [
    [ 0, 1 ],
    [ 1, 2 ]
]
stringShift(s, shift)
 
# This code is contributed by shinjanpatra

Javascript

<script>
 
// Javascript implementation
// of above approach
 
// Function to find the string obtained
// after performing given shift operations
function stringShift(s, shift)
{
 
    var val = 0;
 
    for (var i = 0; i < shift.length; ++i)
 
        // If shift[i][0] = 0, then left shift
        // Otherwise, right shift
        val += shift[i][0] == 0
                   ? -shift[i][1]
                   : shift[i][1];
 
    // Stores length of the string
    var len = s.length;
 
    // Effective shift calculation
    val = val % len;
 
    // Stores modified string
    var result = "";
 
    // Right rotation
    if (val > 0)
        result = s.substring(len - val,len)
                 + s.substring(0, len - val);
 
    // Left rotation
    else
        result
            = s.substring(-val, len )
              + s.substring(0, -val);
 
    document.write( result);
}
 
// Driver Code
var s = "abc";
var shift = [
    [ 0, 1 ],
    [ 1, 2 ]
];
stringShift(s, shift);
 
// This code is contributed by importantly.
</script>
Producción: 

cab

 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por swagami6 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 *