这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情
问题描述
给你一个字符串 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"
解释: 重新排列后,每个字符都还留在原来的位置上。
提示:
s.length == indices.length == n1 <= n <= 100s仅包含小写英文字母0 <= indices[i] < nindices的所有的值都是 唯一 的
思路分析
首先我们先要理解一下题目意思,题目会给我们一个字符串s和一个数字数组indices,我们需要重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。如:s = "codeleet", indices = [4,5,6,7,0,2,1,3],其中每个字母对应的位置为:
c -> 4
o -> 5
d -> 6
e -> 7
l -> 0
e -> 2
e -> 1
t -> 3
将其按顺序重新排序后我们就可以得到
leetcode
理解了题目意思之后,我们便可以开始来解答这道题目了,具体解题步骤如下:
- 1、使用一个与字符串
s相同长度的数组来存放答案
因为数组可以直接修改指定下标的值,所以我们可以使用数组来存放答案,后面可以直接修改指定下标的值为字符串s中对应的字符。
const res = new Array(s.length);
- 2、遍历
indices数组,取出字符串s中对应的字符放到答案数组中
遍历indices数组,得到字符串s每个字符对应的下标,通过下标我们可以直接将对应字符存放到答案数组中去。
for(let i = 0; i < indices.length; i++){
res[indices[i]] = s[i];
}
- 3、将答案数组转换为字符串并返回
通过上面步骤我们便可以得到一个排好序的字符数组,但是题目要求我们返回字符串作为答案,所以我们还需要将答案数组转为字符串再返回,这里我们可以使用数组的join()方法来快速将数组转换为字符串。
array.join(separator)
separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。
return res.join('');
完整 AC 代码如下:
AC 代码
/**
* @param {string} s
* @param {number[]} indices
* @return {string}
*/
var restoreString = function(s, indices) {
const res = new Array(s.length);
for(let i = 0; i < indices.length; i++){
res[indices[i]] = s[i];
}
return res.join('');
};
说在后面
本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。