Inverser les sous-chaînes de la chaîne donnée en fonction du tableau d’indices donné

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

Étant donné une chaîne S et un tableau d’indices UN[]la tâche consiste à inverser les sous-chaînes de la chaîne donnée en fonction du tableau d’indices donné.
Noter: UN[i] ≤ longueur(S), pour tout i.
Exemples:

Saisir: S = “abcdef”, A[] = {2, 5}
Production: baedcf
Explication:

Untitled Diagram361

Saisir: S = “abcdefghij”, A[] = {2, 5}
Production: baedcjihgf

Approcher: L’idée est d’utiliser le concept d’inversion des sous-chaînes de la chaîne donnée.

  • Triez le tableau d’indices.
  • Extrayez la sous-chaîne formée pour chaque index dans le tableau donné comme suit :
    • Pour le premier index du tableau A, la sous-chaîne formée sera de l’index 0 à A[0] (exclusif) de la chaîne donnée, c’est-à-dire [0, A[0])
    • Pour tous les autres index du tableau A (à l’exception de last), la sous-chaîne formée proviendra de l’index A[i] à un[i+1] (exclusif) de la chaîne donnée, c’est-à-dire [A[i]UN[i+1])
    • Pour le dernier index du tableau A, la sous-chaîne formée proviendra de l’index A[i] à L (inclus) où L est la longueur de la chaîne, c’est-à-dire [A[i]L]
  • Inverse chaque sous-chaîne trouvée dans la chaîne donnée

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus.

C++

#include <bits/stdc++.h>

using namespace std;

void reverseStr(string& str,

                int l, int h)

{

    int n = h - l;

    

    

    for (int i = 0; i < n / 2; i++) {

        swap(str[i + l], str[n - i - 1 + l]);

    }

}

void reverseString(string& s, int A[], int n)

{

    

    reverseStr(s, 0, A[0]);

    

    for (int i = 1; i < n; i++)

        reverseStr(s, A[i - 1], A[i]);

    

    reverseStr(s, A[n - 1], s.length());

}

int main()

{

    string s = "abcdefgh";

    int A[] = { 2, 4, 6 };

    int n = sizeof(A) / sizeof(A[0]);

    reverseString(s, A, n);

    cout << s;

    return 0;

}

Java

class GFG

{

static String s;

static void reverseStr(int l, int h)

{

    int n = h - l;

    

    

    for (int i = 0; i < n / 2; i++)

    {

        s = swap(i + l, n - i - 1 + l);

    }

}

static void reverseString(int A[], int n)

{

    

    reverseStr(0UN[0]);

    

    for (int i = 1; i < n; i++)

        inverseStr(A[i - 1]UN[i]);

    

    inverseStr(A[n - 1]s.length());

}

static String swap(int i, int j)

{

    char ch[] = s.toCharArray();

    char temp = ch[i];

    ch[i] = ch[j];

    ch[j] = temp;

    return String.valueOf(ch);

}

public static void main(String[] args)

{

    s = "abcdefgh";

    int A[] = { 2, 4, 6 };

    int n = A.length;

    reverseString(A, n);

    System.out.print(s);

}

}

Python3

def reverseStr(str, l, h):

    n = h - l

    

    

    for i in range(n//2):

        str[i + l], str[n - i - 1 + l] = str[n - i - 1 + l], str[i + l]

def reverseString(s, A, n):

    

    reverseStr(s, 0UN[0])

    

    for i in range(1, n):

        reverseStr(s, A[i - 1]UN[i])

    

    reverseStr(s, A[n - 1], len(s))

s = "abcdefgh"

s = [i for i in s]

A = [2, 4, 6]

n = len(A)

reverseString(s, A, n)

print("".join(s))

C#

using System;

class GFG

{

static String s;

static void reverseStr(int l, int h)

{

    int n = h - l;

    

    

    for (int i = 0; i < n / 2; i++)

    {

        s = swap(i + l, n - i - 1 + l);

    }

}

static void reverseString(int []A, int n)

{

    

    reverseStr(0, A[0]);

    

    for (int i = 1; i < n; i++)

        reverseStr(A[i - 1], A[i]);

    

    reverseStr(A[n - 1], s.Length);

}

static String swap(int i, int j)

{

    char []ch = s.ToCharArray();

    char temp = ch[i];

    ch[i] = ch[j];

    ch[j] = temp;

    return String.Join("",ch);

}

public static void Main(String[] args)

{

    s = "abcdefgh";

    int []A = { 2, 4, 6 };

    int n = A.Length;

    reverseString(A, n);

    Console.Write(s);

}

}

Javascript

<script>

function reverseStr(str, l, h)

{

    var n = h - l;

    

    

    for (var i = 0; i < n / 2; i++) {

        [str[i + l], str[n - i - 1 + l]] =

        [str[n - i - 1 + l], str[i + l]];

    }

    return str;

}

function reverseString(s, A, n)

{

    

    s = reverseStr(s, 0, A[0]);

    

    for (var i = 1; i < n; i++)

        s = reverseStr(s, A[i - 1], A[i]);

    

    s = reverseStr(s, A[n - 1], s.length);

    return s;

}

var s = "abcdefgh";

var A = [2, 4, 6];

var n = A.length;

s = reverseString(s.split(''), A, n);

document.write( s.join(''));

</script>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *