58-II. 左旋转字符串
58-II. 左旋转字符串
题目
某公司门禁密码使用动态口令技术。初始密码为字符串 password
,密码更新均遵循以下步骤:
- 设定一个正整数目标值
target
- 将
password
前target
个字符按原顺序移动至字符串末尾
请返回更新后的密码字符串。
示例 1:
输入: password = "s3cur1tyC0d3", target = 4
输出: "r1tyC0d3s3cu"
示例 2:
输入: password = "lrloseumgh", target = 6
输出: "umghlrlose"
提示:
1 <= target < password.length <= 10000
解题思路
获取目标值:
- 从输入中获取正整数
target
,对password.length
取模,防止目标值超过字符串长度。
- 从输入中获取正整数
处理字符串:
- 将
password
字符串分为两部分:- 前
target
个字符。 - 从
target
开始到字符串末尾的部分。
- 前
- 将这两部分拼接在一起,前
target
个字符移至字符串末尾,并返回拼接好的字符串。
- 将
复杂度分析
- 时间复杂度:
O(n)
,其中n
是字符串的长度,需要遍历字符串进行切片,时间复杂度为线性级别。 - 空间复杂度:
O(n)
,由于创建了新的字符串,空间复杂度也是线性级别。
代码
/**
* @param {string} password
* @param {number} target
* @return {string}
*/
var dynamicPassword = function (password, target) {
// 获取目标值的合法范围,防止目标值超过字符串长度
target = target % password.length;
// 将前 target 个字符移动到字符串末尾
return password.slice(target) + password.slice(0, target);
};