力扣(LeetCode)算法题解:1528. 重新排列字符串

简介: 力扣(LeetCode)算法题解:1528. 重新排列字符串

(一)题目描述

给你一个字符串 s 和一个 长度相同 的整数数组 indices 。

请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。

返回重新排列后的字符串。

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/shuffle-string

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

(二)输入、输出示例

示例 1:

输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3]
输出:"leetcode"
解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。


示例 2:

输入:s = "abc", indices = [0,1,2]
输出:"abc"
解释:重新排列后,每个字符都还留在原来的位置上。

示例 3:

输入:s = "aiohn", indices = [3,1,4,2,0]
输出:"nihao"
• 1
• 2

示例 4:

输入:s = "aaiougrt", indices = [4,0,2,6,7,3,1,5]
输出:"arigatou"

示例 5:

输入:s = "art", indices = [1,0,2]
输出:"rat"

三)代码实现

方法1(php版):

解题思路

以示例1为例分析:

s = "codeleet", indices = [4,5,6,7,0,2,1,3]

s中的0号元素c,应该放在indices中0元素的位置[key=4]

s中的1号元素o,应该放在indices中1元素的位置[key=6]

s中的2号元素d,应该放在indices中2元素的位置[key=5]

s中的3号元素e,应该放在indices中3元素的位置[key=7]

s中的4号元素l,应该放在indices中4元素的位置[key=0]

s中的5号元素e,应该放在indices中5元素的位置[key=1]

s中的6号元素e,应该放在indices中6元素的位置[key=2]

s中的7号元素t,应该放在indices中7元素的位置[key=3]

逆着来:

indices[key=0]的元素是4,应该找s中的4号元素l

indices[key=1]的元素是5,应该找s中的5号元素e

indices[key=2]的元素是6,应该找s中的6号元素e

indices[key=3]的元素是7,应该找s中的7号元素t

indices[key=4]的元素是0,应该找s中的0号元素c

indices[key=5]的元素是2,应该找s中的2号元素d

indices[key=6]的元素是1,应该找s中的1号元素o

indices[key=7]的元素是3,应该找s中的3号元素e


注:indices变量是已经排好序的数组。

伪代码描述:indices[v] = s[k]

代码实现

class Solution {
    /**
     * @param String $s
     * @param Integer[] $indices
     * @return String
     */
    function restoreString($s, $indices) {
        $arr = str_split($s);
        foreach ($indices as $k => $v){
            $indices[$v] = $arr[$k];
        }
        $s = join("", $indices);
        return $s;
    }
}

(四)性能分析

运行时间 内存消耗
28ms 14.8 MB
目录
相关文章
|
5月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
11月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
306 6
|
12月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
386 11
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
362 4
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
193 1
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
220 2
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
496 0
|
5月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
325 2
|
6月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
302 3

热门文章

最新文章