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

31 May, 2021
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]
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++
Java
Python3
C#
Javascript
// 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 stringvoid 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 indicesvoid 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 Codeint 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 implementation to reverse// the subStrings of the given String// according to the given Array of indicesclass GFG{ static String s; // Function to reverse a Stringstatic 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 indicesstatic 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 Codepublic 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
# Python3 implementation to reverse# the substrings of the given String# according to the given Array of indices # Function to reverse a stringdef 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 indicesdef 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 Codes = "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
// C# implementation to reverse// the subStrings of the given String// according to the given Array of indicesusing System; class GFG{ static String s; // Function to reverse a Stringstatic 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 indicesstatic 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 Codepublic 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
<script> // JavaScript implementation to reverse// the substrings of the given String// according to the given Array of indices // Function to reverse a stringfunction reverseStr(str, l, h){    var n = h - l;     // Swap character starting    // from two corners    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 to reverse the string// with the given array of indicesfunction reverseString(s, A, n){     // Reverse the string from 0 to A[0]    s = reverseStr(s, 0, A[0]);     // Reverse the string for A[i] to A[i+1]    for (var i = 1; i < n; i++)        s = reverseStr(s, A[i - 1], A[i]);     // Reverse String for A[n-1] to length    s = reverseStr(s, A[n - 1], s.length);    return s;} // Driver Codevar s = "abcdefgh";var A = [2, 4, 6];var n = A.length;s = reverseString(s.split(''), A, n);document.write( s.join('')); </script>
badcfehg
 
mohit kumar 29
Rajput-Ji
29AjayKumar
famously
substring
Arrays
Pattern Searching
Strings
Arrays
Strings
Pattern Searching
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count pairs with given sum
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
KMP Algorithm for Pattern Searching
Rabin-Karp Algorithm for Pattern Searching
Check if a string is substring of another
Naive algorithm for Pattern Searching
Boyer Moore Algorithm for Pattern Searching