LeetCode 算法入门 — 反转字符串

148 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

反转字符串

原题地址

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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"]

提示:

  • 11 <= s.length <= 10510^5
  • s[i] 都是 ASCII 码表中的可打印字符

思路分析

方法一

可使用数组的现有的 API reverse 方法,即可将数组逆转。

MDN释义:reverse 方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。

方法二

  1. 定义 startend 两个指针;
  2. startend 位置的元素互换位置,然后将 start 向右移动,即 start++;将 end 向左移动,即 end--
  3. 交换位置持续到 start <= end 为止,即为交换完毕。

AC 代码

方法一

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    s.reverse()
};

结果:

  • 执行结果: 通过
  • 执行用时:72 ms, 在所有 JavaScript 提交中击败了99.20%的用户
  • 内存消耗:48.4 MB, 在所有 JavaScript 提交中击败了6.22%的用户
  • 通过测试用例:477 / 477

方法二

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    let start = 0
    let end = s.length - 1
    while(start <= end) {
        [s[start], s[end]] = [s[end], s[start]]
        start++
        end--
    }
};

结果:

  • 执行结果: 通过
  • 执行用时:72 ms, 在所有 JavaScript 提交中击败了99.20%的用户
  • 内存消耗:48.1 MB, 在所有 JavaScript 提交中击败了18.27%的用户
  • 通过测试用例:477 / 477

END