Rearrange a string according to the given indices
Given a string S and an array index[], the task is to rearrange the string S by placing every character S[i] to position index[i].
Example
Input: S = “geeksforgeeks”, index[] = {5, 6, 7, 0, 1, 2, 8, 9, 10, 3, 4, 11, 12}
Output: ksfeegeeorgks
Input: S = “math”, index[] = {0, 1, 2, 3}
Output: math
Approach:
To solve the problem, follow the steps given below:
- Convert the string S to a list of characters, since strings are immutable in nature.
- Copy the list. Rearrange the characters in this list according the values from index[i].
- Convert the list to string and print the final string.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void Convertstrings(string s, int index[],
int n)
{
char a[s.length()];
char b[s.length()];
for ( int ii = 0; ii < s.length(); ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0, j = 0;
while (j < s.length() && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = temp;
j += 1;
i += 1;
}
string tmp = "" ;
for (i = 0; i < s.length(); i++)
{
tmp += b[i];
}
cout << tmp << endl;
}
int main()
{
string s = "geeksforgeeks" ;
int index[] = { 5, 6, 7, 0, 1, 2, 8,
9, 10, 3, 4, 11, 12};
int n = sizeof (index) / sizeof (index[0]);
Convertstrings(s, index, n);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void ConvertStrings( char []s,
int index[],
int n)
{
char []a = new char [s.length];
char []b = new char [s.length];
for ( int ii = 0 ; ii < s.length; ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0 , j = 0 ;
while (j < s.length && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = ( char ) temp;
j += 1 ;
i += 1 ;
}
String tmp = "" ;
for (i = 0 ; i < s.length; i++)
{
tmp += b[i];
}
System.out.print(tmp + "\n" );
}
public static void main(String[] args)
{
String s = "geeksforgeeks" ;
int index[] = { 5 , 6 , 7 , 0 , 1 , 2 , 8 ,
9 , 10 , 3 , 4 , 11 , 12 };
int n = index.length;
ConvertStrings(s.toCharArray(), index, n);
}
}
|
Python3
def Convertstrings(s, index):
a = []
j = 0
i = 0
for ii in str (s):
a.append(ii)
b = a[:]
while j < len (a) and i < len (index):
k = index[i]
temp = a[j]
b[k] = temp
j + = 1
i + = 1
s = ''
for i in range ( len (b)):
s + = b[i]
print (s)
s = "geeksforgeeks"
index = [ 5 , 6 , 7 , 0 , 1 , 2 , 8 , 9 , 10 , 3 , 4 , 11 , 12 ]
Convertstrings(s, index)
|
C#
using System;
class GFG{
static void ConvertStrings( char []s,
int []index,
int n)
{
char []a = new char [s.Length];
char []b = new char [s.Length];
for ( int ii = 0; ii < s.Length; ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0, j = 0;
while (j < s.Length && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = ( char ) temp;
j += 1;
i += 1;
}
String tmp = "" ;
for (i = 0; i < s.Length; i++)
{
tmp += b[i];
}
Console.Write(tmp + "\n" );
}
public static void Main(String[] args)
{
String s = "geeksforgeeks" ;
int []index = { 5, 6, 7, 0, 1, 2, 8,
9, 10, 3, 4, 11, 12};
int n = index.Length;
ConvertStrings(s.ToCharArray(), index, n);
}
}
|
Javascript
<script>
function ConvertStrings(s, index, n)
{
let a = new Array(s.length);
a.fill( '0' );
let b = new Array(s.length);
b.fill( '0' );
for (let ii = 0; ii < s.length; ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
let i = 0, j = 0;
while (j < s.length && i < n)
{
let k = index[i];
let temp = a[j].charCodeAt();
b[k] = String.fromCharCode(temp);
j += 1;
i += 1;
}
let tmp = "" ;
for (i = 0; i < s.length; i++)
{
tmp = tmp + b[i];
}
document.write(tmp + "</br>" );
}
let s = "geeksforgeeks" ;
let index = [ 5, 6, 7, 0, 1, 2, 8, 9, 10, 3, 4, 11, 12];
let n = index.length;
ConvertStrings(s.split( '' ), index, n);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Last Updated :
15 Jun, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...