每日一题-LeetCode(344)反转字符串

111 阅读2分钟

本文首发小呆&小萌的情侣博客,两个前端的学习生活分享小天地,欢迎关注收藏。

今天是小呆刷题的第8天,今天的题目是:力扣(LeetCode)的第344题,反转字符串

题目要求

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。

示例:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

提示:

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

解题思路

这道题,由于题目要求原地修改数组,小呆首先想到了前几天一直在用的双指针算法。具体思路如下:

  1. 设置left,right两个指针,一个指向数组头部,一个指向数组尾部
  2. 循环条件是left <= right
  3. 设置一个temp变量,用于leftright交换时的中转站
  4. 交换left,right,让left往后移一步,right往前移一步

具体过程用gif图辅助理解一下:

反转字符串

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

小结

果然只有不断的练习,才能对一些算法形成条件反射。比如原地修改类的题型,小呆就会首先想到双指针算法。加油加油加油!坚持下去,努力终有回报~

引用

力扣LeetCode的第344题-反转字符串