【初级算法|字符串】08-反转字符串

74 阅读1分钟

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

【初级算法|字符串】08-反转字符串

题目

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

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

分析

将字符串转成数组,在不使用另外的数组分配额外的空间,我们原地修改转换后的数组、使用 O(1) 的额外空间解决这一问题。主要是对数组进行反转,反转就是首位互换值,这样只需要遍历数组的一半即可完成所有的兑换。

s = ["h","e","l","l","o"]

首尾互换:["o","e","l","l","h"]

不断一个从左到右,一个从右到左进行互换

直接刚好在 arry.length / 2 的位置时结束,然后输出结果。

需要注意的临界条件:

  • 数组只有一位时,可以直接输出结果
  • 遍历的终结条件是一半:arry.length / 2

AC 代码

function func_exerise6(s) {
    let arry = Array.from(s);
    if (arry.length === 1) return s;
    for (let i = 0; i < arry.length; i++) {
        if (i >= arry.length / 2) { break; }
        let cur = arry[i];
        arry[i] = arry[arry.length - 1 - i];
        arry[arry.length - 1 - i] = cur;
    }
    return arry.join('')
}

总结

字符串反转可以想到的就是转换成数组解决。两个数值的互换可以使用临时参数进行交换。以上的解决方法其实就是通过数组的双指针,从左到右一个指针,另一个是从右到左,然后临界条件是遇到2个指针刚好是相等,或者相减等于1即可结束遍历了。

题目来源:leetcode-cn.com/leetbook/re…