题目详解
相关链接
思路
- 便历一遍,前面部分动态填充到数组尾部
- 后面部分原地修改数组
- 截取长度
看完代码随想录之后的想法
- 学习到了
局部反转+整体反转
的解法
实现过程中遇到的困难
代码
局部反转+整体反转
TypeScript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17function reverseLeftWords(s: string, n: number): string {
const strArr = s.split(''),
len = s.length
reverse(strArr, 0, n - 1)
reverse(strArr, n, len - 1)
reverse(strArr, 0, len - 1)
return strArr.join('')
}
/** 反转数组元素 */
function reverse(strArr: string[], start: number, end: number) {
while (start < end) {
[strArr[start], strArr[end]] = [strArr[end], strArr[start]]
start++
end--
}
}时间复杂度:O(n)
空间复杂度:O(n)填充
TypeScript 1
2
3
4
5
6
7
8
9
10
11
12function reverseLeftWords(s: string, n: number): string {
const strArr = s.split(''),
len = s.length
let slow = 0,
fast = 0
while (fast < len + n) {
if (fast < n) strArr.push(strArr[fast++])
else strArr[slow++] = strArr[fast++]
}
strArr.length = len
return strArr.join('')
}时间复杂度:O(n)
空间复杂度:O(n)
收获
- 字符串反转有时候 局部反转、整体反转 能更巧妙的解决问题