LC344. 反转字符串(第18题)

100 阅读1分钟

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]];
    }
};