这是我参与更文挑战的第1天,活动详情查看: 更文挑战
前言
受“王鱼”同学的点拨,从今天开始刷LeetCode Top精选面试题,为冲击秋招做准备。
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:[“h”,”e”,”l”,”l”,”o”]
输出:[“o”,”l”,”l”,”e”,”h”]
玩一下~
const reverseString =(s) =>{
s.reverse();
}
console.log(reverseString(['h','e','l','l','o']))
复制代码
哈哈哈,有人说你这是什么啊,我也会,这不就是api的调用么,别急,先热个身嘛,来,力扣刷刷的思路虽迟但到~
双指针
重新复习一下我们前几天学习的双指针
对于长度为 N 的待被反转的字符数组,我们可以观察反转前后下标的变化,假设反转前字符数组为 s[0] s[1] s[2] … s[N – 1],那么反转后字符数组为 s[N – 1] s[N – 2] … s[0]。比较反转前后下标变化很容易得出 s[i] 的字符与 s[N – 1 – i] 的字符发生了交换的规律,因此我们可以得出如下双指针的解法:
将 start 指向字符数组首元素,end 指向字符数组尾元素。
当 start < end:
交换 s[start] 和 s[end];
start 指针右移一位,即 start = start + 1;
end 指针左移一位,即 end = end – 1。
当 start >= end,反转结束,返回字符数组即可。
const reverseString =(s) =>{
let start = 0, end = s.length-1;
while(start<end) {
[s[start],s[end]] = [s[end],s[start]] // 用到了es6中的解构赋值
start++
end--
}
return s
}
console.log(reverseString(['h','e','l','l','o']))
复制代码
递归
什么是递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己, 这个函数就是递归函数
const reverseString =(s) =>{
convert =(left,right) => {
if(left>=right) return
[s[left],s[right]] = [s[right],s[left]]
convert(left+1,right-1)
}
convert(0,s.length-1)
return s
}
console.log(reverseString(['h','e','l','l','o']))
复制代码
总结
刷题打卡第7天,选择力扣第344题,学习了反转字符串,一起加油哇~
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)关注公众号给npy的前端秘籍,我们一起学习一起进步。
觉得不错的话,也可以阅读其他文章(感谢朋友的鼓励与支持???)