给你一个字符串 s
和一个 长度相同 的整数数组 indices
。
请你重新排列字符串 s
,其中第 i
个字符需要移动到 indices[i]
指示的位置。
返回重新排列后的字符串。
示例 1:
输入:s = "codeleet", indices
= [4,5,6,7,0,2,1,3]
输出:"leetcode"
解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。
示例 2:
输入:s = "abc", indices
= [0,1,2]
输出:"abc"
解释:重新排列后,每个字符都还留在原来的位置上。
package com.yang;
/**
* @BelongsProject: untitled
* @BelongsPackage: com.yang
* @Author: yzh
* @CreateTime: 2023-12-01
*/
import java.util.HashMap;
/**
* @BelongsProject: untitled
* @BelongsPackage: com.yang
* @Author: yzh
* @CreateTime: 2023-11-28
*/
public class MyTest {
public static void main(String[] args) {
String a = "codeleet";
int[] arr = {4,5,6,7,0,2,1,3};
System.out.println(restoreString(a, arr));
System.out.println(restoreString2(a,arr));
}
//普通解法
public static String restoreString(String s, int[] arr) {
//创建一个HashMap集合 将arr里面的元素作为键,字符串中的字符作为值 按顺序存储
HashMap<Integer, Character> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
map.put(arr[i],s.charAt(i));
}
//创建一个字符数组
char[] chars = new char[arr.length];
//按照顺序来接收map中的字符值作为元素
for (int i = 0; i < chars.length; i++) {
chars[i]=map.get(i);
}
//将字符数组转为String
String res = String.valueOf(chars);
return res;
}
//优化解法
public static String restoreString2(String s, int[] arr) {
//将arr数组的长度得出
int len = arr.length;
//按照arr数组长度创建一个字符数组用来进行存储
char[] chars = new char[len];
for (int i = 0; i <len; i++) {
//按照顺序对s中的字符进行存储
chars[arr[i]]=s.charAt(i);
}
return String.valueOf(chars);
}
}