Reverse the substrings of the given String according to the given Array of indices

Given a string S and an array of indices A[], the task is to reverse the substrings of the given String according to the given Array of indices.

Note: A[i] ≤ length(S), for all i.

Examples:



Input: S = “abcdef”, A[] = {2, 5}
Output: baedcf
Explanation:

Input: S = “abcdefghij”, A[] = {2, 5}
Output: baedcjihgf

Approach: The idea is to use the concept of reversing the substrings of the given string.

  • Sort the Array of Indices.
  • Extract the substring formed for each index in the given array as follows:
    • For the first index in the array A, the substring formed will be from index 0 to A[0] (exclusive) of the given string, i.e. [0, A[0])
    • For all other index in the array A (except for last), the substring formed will be from index A[i] to A[i+1] (exclusive) of the given string, i.e. [A[i], A[i+1])
    • For the last index in the array A, the substring formed will be from index A[i] to L (inclusive) where L is the length of the string, i.e. [A[i], L]
  • Reverse each substring found in the given string

Below is the implementation of the above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to reverse
// the substrings of the given String
// according to the given Array of indices
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to reverse a string
void reverseStr(string& str,
                int l, int h)
{
    int n = h - l;
  
    // Swap character starting
    // from two corners
    for (int i = 0; i < n / 2; i++) {
        swap(str[i + l], str[n - i - 1 + l]);
    }
}
  
// Function to reverse the string
// with the given array of indices
void reverseString(string& s, int A[], int n)
{
  
    // Reverse the string from 0 to A[0]
    reverseStr(s, 0, A[0]);
  
    // Reverse the string for A[i] to A[i+1]
    for (int i = 1; i < n; i++)
        reverseStr(s, A[i - 1], A[i]);
  
    // Reverse String for A[n-1] to length
    reverseStr(s, A[n - 1], s.length());
}
  
// Driver Code
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to reverse
// the subStrings of the given String
// according to the given Array of indices
class GFG
{
  
static String s;
  
// Function to reverse a String
static void reverseStr(int l, int h)
{
    int n = h - l;
  
    // Swap character starting
    // from two corners
    for (int i = 0; i < n / 2; i++) 
    {
        s = swap(i + l, n - i - 1 + l);
    }
}
  
// Function to reverse the String
// with the given array of indices
static void reverseString(int A[], int n)
{
  
    // Reverse the String from 0 to A[0]
    reverseStr(0, A[0]);
  
    // Reverse the String for A[i] to A[i+1]
    for (int i = 1; i < n; i++)
        reverseStr(A[i - 1], A[i]);
  
    // Reverse String for A[n-1] to length
    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.valueOf(ch); 
  
// Driver Code
public static void main(String[] args)
{
    s = "abcdefgh";
    int A[] = { 2, 4, 6 };
    int n = A.length;
  
    reverseString(A, n);
    System.out.print(s);
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to reverse
# the substrings of the given String
# according to the given Array of indices
  
# Function to reverse a string
def reverseStr(str, l, h):
    n = h - l
  
    # Swap character starting
    # from two corners
    for i in range(n//2):
        str[i + l], str[n - i - 1 + l] = str[n - i - 1 + l], str[i + l]
  
# Function to reverse the string
# with the given array of indices
def reverseString(s, A, n):
  
    # Reverse the from 0 to A[0]
    reverseStr(s, 0, A[0])
  
    # Reverse the for A[i] to A[i+1]
    for i in range(1, n):
        reverseStr(s, A[i - 1], A[i])
  
    # Reverse String for A[n-1] to length
    reverseStr(s, A[n - 1], len(s))
  
# Driver Code
s = "abcdefgh"
s = [i for i in s]
A = [2, 4, 6]
n = len(A)
  
reverseString(s, A, n)
print("".join(s))
  
# This code is contributed by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation to reverse
// the subStrings of the given String
// according to the given Array of indices
using System;
  
class GFG
{
  
static String s;
  
// Function to reverse a String
static void reverseStr(int l, int h)
{
    int n = h - l;
  
    // Swap character starting
    // from two corners
    for (int i = 0; i < n / 2; i++) 
    {
        s = swap(i + l, n - i - 1 + l);
    }
}
  
// Function to reverse the String
// with the given array of indices
static void reverseString(int []A, int n)
{
  
    // Reverse the String from 0 to A[0]
    reverseStr(0, A[0]);
  
    // Reverse the String for A[i] to A[i+1]
    for (int i = 1; i < n; i++)
        reverseStr(A[i - 1], A[i]);
  
    // Reverse String for A[n-1] to length
    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); 
  
// Driver Code
public static void Main(String[] args)
{
    s = "abcdefgh";
    int []A = { 2, 4, 6 };
    int n = A.Length;
  
    reverseString(A, n);
    Console.Write(s);
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

badcfehg

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.