Skip to content

344. 反转字符串

解题过程

INFO

题目链接 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题

javascript
/**
 * @link https://leetcode.cn/problems/reverse-string/
 * @title 344. 反转字符串
 * @description 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
 * 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
// 解法一
// 思路:使用字符串 API reverse() 函数一行代码解决
var reverseString = function (s) {
  s.reverse()
  console.log(s)
}

// 解法二
// 思路:通过收尾索引位置向中间交换位置元素值做原地字符串数组值更换
var reverseString = function (s) {
  // 记录首尾开始向中间交换位置的次数
  let loop = Math.round(s.length / 2)
  const lastIndex = s.length - 1
  let index = 0

  while (loop--) {
    const temp = s[index]
    s[index] = s[lastIndex - index]
    s[lastIndex - index] = temp
    index++
  }

  console.log(s)
}

reverseString(["h","e","l","l","o"]) // ["o","l","l","e","h"]
// reverseString(["H","a","n","n","a","h"]) // ["h","a","n","n","a","H"]

解题感受

第一眼看到这题,窃喜,这不是一行代码搞定的事嘛,字符串 API reverse() 直接搞定,然后又觉得可以试试最常用的循环解决,那就写了两种比较常见的解题思路。官方的解题思路涉及到了数组交换位置元素这个,太久没用导致我到忘记了

参考题解