Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
菜鸟就要从第18题继续
一、题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
- 示例 1: 输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"]
- 示例 2: 输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 105 s[i] 都是 ASCII 码表中的可打印字符
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
原地替换:这道题没什么好说的,要求原位替换,那就是一个个换,也就是s[i]和s[n-1-i]交换,这里用了上一个旋转数组题目学到的替换写法,不写temp变量中转了,所以记录下。另外很直观,这道题的边界是n/2向下取整,走一圈就又回来了。
当然也可以用双指针,详见方法二。
三、AC 代码:
1、原位替换
/**
* @param {character[][]} board
* @return {boolean}
*/
var reverseString = function(s) {
const n =s.length
for(let i=0;i<n/2;i++){
[s[i],s[n-1-i]]=[s[n-1-i],s[i]]
}
};
2、双指针
var reverseString = function(s) {
const n = s.length;
for (let left = 0, right = n - 1; left < right; ++left, --right) {
[s[left], s[right]] = [s[right], s[left]];
}
};