给定一个字符串S和一个数组index [] ,任务是通过将每个字符S [i]放置到位置index [i]来重新排列字符串S。
例子
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
方法:
要解决此问题,请按照以下步骤操作:
- 字符串S转换为字符的列表,因为字符串在本质不变。
- 复制列表。根据index [i]的值重新排列此列表中的字符。
- 将列表转换为字符串并打印最终字符串。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to convert the strings
// to proper
void Convertstrings(string s, int index[],
int n)
{
char a[s.length()];
char b[s.length()];
// Convert string to array
for(int ii = 0; ii < s.length(); ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0, j = 0;
// Move characters to specified indices
while(j < s.length() && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = temp;
j += 1;
i += 1;
}
string tmp = "";
// Convert the list to string
for(i = 0; i < s.length(); i++)
{
tmp += b[i];
}
// Print the answer
cout << tmp << endl;
}
// Driver Code
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;
}
// This code is contributed by rutvik_56
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to convert the Strings
// to proper
static void ConvertStrings(char []s,
int index[],
int n)
{
char []a = new char[s.length];
char []b = new char[s.length];
// Convert String to array
for(int ii = 0; ii < s.length; ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0, j = 0;
// Move characters to specified indices
while(j < s.length && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = (char) temp;
j += 1;
i += 1;
}
String tmp = "";
// Convert the list to String
for(i = 0; i < s.length; i++)
{
tmp += b[i];
}
// Print the answer
System.out.print(tmp +"\n");
}
// Driver Code
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);
}
}
// This code is contributed by Rohit_ranjan
Python3
# Python3 Program to implement
# the above approach
# Function to convert the strings
# to proper
def Convertstrings(s, index):
a = []
j = 0
i = 0
# Convert string to list
for ii in str(s):
a.append(ii)
# Copy the list to another list
b = a[:]
# Move characters to specified indices
while j < len(a) and i < len(index):
k = index[i]
temp = a[j]
b[k] = temp
j += 1
i += 1
s = ''
# Convert the list to string
for i in range(len(b)):
s += b[i]
# Print the answer
print(s)
# Driver Code
s = "geeksforgeeks"
index = [5, 6, 7, 0, 1, 2, 8, 9, 10, 3, 4, 11, 12]
Convertstrings(s, index)
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to convert the Strings
// to proper
static void ConvertStrings(char []s,
int []index,
int n)
{
char []a = new char[s.Length];
char []b = new char[s.Length];
// Convert String to array
for(int ii = 0; ii < s.Length; ii++)
{
a[ii] = s[ii];
b[ii] = s[ii];
}
int i = 0, j = 0;
// Move characters to specified indices
while(j < s.Length && i < n)
{
int k = index[i];
int temp = a[j];
b[k] = (char) temp;
j += 1;
i += 1;
}
String tmp = "";
// Convert the list to String
for(i = 0; i < s.Length; i++)
{
tmp += b[i];
}
// Print the answer
Console.Write(tmp +"\n");
}
// Driver Code
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);
}
}
// This code is contributed by Rajput-Ji
输出:
ksfeegeeorgks
时间复杂度: O(N)
辅助空间: O(N)