重新排列字符串

101 阅读2分钟

这是我参与「掘金日新计划 · 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 == n
  • 1 <= n <= 100
  • s 仅包含小写英文字母
  • 0 <= indices[i] < n
  • indices 的所有的值都是 唯一 的

思路分析

首先我们先要理解一下题目意思,题目会给我们一个字符串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('');
};

说在后面

本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。