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即可结束遍历了。