JS leetcode 反转字符串 题解分析
壹 ❀ 引
今天做的一道题非常简单,原题来自leetcode第344题反转字符串,题目如下:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
我们先来分析题目,再来说说具体怎么做。
贰 ❀ 解题分析
简单分析题目其实说到底就是倒序排列数组,那么我们马上可以想到数组API reverse,单说实现我们完全可以这样:
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function(s) {
s.reverse();
};
当然要是面试真遇到这题,肯定不允许这么做,我们可以把这道题理解为实现API reverse,所以还是得另辟途径。
倒序排列数组的本质,其实也是在做元素位置互换,有个规则,比如数组[1,2,3,4]:

因为要倒序,所以是第一位与最后一位互换位置,第二位和第三位互换位置。
当然数组元素个数会有基数的情况,但这并不影响这个规律,比如[1,2,3,4,5]还是如此,只是中间位的元素不用互换而已。

在实现代码前,官方已经提供了一个思路,双指针技巧,常规的循环比如for往往是从i=0开始遍历,或者while倒序遍历,这两种都只有一个指针来表示当前遍历到了哪个索引。
而双指针则是从第一个元素与最后一个元素同时相对进行遍历,也就是成对的遍历,可以想象这样遍历的效率会大大提升。
我们已经知道了数组倒序排列是交换位置,那可以用i表示正序遍历,用一个j表示倒序遍历,每遍历一次交换两个元素,而满足遍历的条件仅仅是i<j即可。
以数组[1,2,3,4]来说,1与4遍历一次,2与3遍历一次,此时i为1,j为2,下一步i自增j递减i为2j为1很明显不符合条件。
再看数组[1,2,3,4,5],遍历2次后,i自增j递减都会变成3,同样不满足i<j,所以我们仅仅需要这个条件来决定是否还需要遍历。
说到这思路已经很清晰了,直接上代码:
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function (s) {
var i = 0,
j = s.length - 1;
for (; i < j; i++, j--) {
[s[i], s[j]] = [s[j], s[i]];
};
};
我在阅读数组和字符串卡片的双指针技巧之前,一直不知道双指针是个啥,到现在心里才有答案。不过我在 JS leetcode 两数之和解答思路分析提供的第二种思路中也想到了从头和从尾同时遍历,虽然我是用了两个循环进行嵌套,不过还是有了点双指针的影子。
那么关于本题就说到这了。
JS leetcode 反转字符串 题解分析的更多相关文章
- leetcode 反转字符串
请编写一个函数,其功能是将输入的字符串反转过来. 示例: 输入:s = "hello" 返回:"olleh" /** * @param {string} s * ...
- js常用的字符串方法分析
##字符串## 字符串: 由0个或多个字符组成,被成对的英文单引号或双引号包含起来的. 字符编码: 每一个字符在计算机存储的编号. 计算机会保存有一套或几套用于标注编号与字符对应关系的字典.(字符集) ...
- javascript(js)反转字符串
网上看到的都是这个写法较多: str.split('').reverse().join(''); 这里发现一个ES6的写法也可以达到同样的效果: Array.from(str).reverse().j ...
- [Leetcode]反转字符串中的单词 III
题目 代码 class Solution { public: string reverseWords(string s) { for(int i=0,j=0;j<=s.size();j++) { ...
- 代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串
基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...
- C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- leetCode题解之反转字符串中的元音字母
1.问题描述 Reverse Vowels of a String Write a function that takes a string as input and reverse only the ...
- LeetCode:反转字符串中的元音字母【345】
LeetCode:反转字符串中的元音字母[345] 题目描述 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "h ...
- Leetcode#557. Reverse Words in a String III(反转字符串中的单词 III)
题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输 ...
- Leetcode 557. 反转字符串中的单词 III
1.题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" ...
随机推荐
- C++ 利用模板偏特化和 decltype(()) 识别表达式的值类别
刚刚看到一篇 C++ 博客,里面讲到用模板偏特化和 decltype() 识别值类别:lvalue glvalue xvalue rvalue prvalue.依照博客的方法试了一下,发现根本行不通. ...
- [AGC058C] Planar Tree 题解
前言 赛时没做出来,赛后把题补了.果然是 maroonrk 出的,名不虚传啊--真的很好的一道题目. 解法 题目中的圆周有以下几个性质: 圆周上如果有相邻的等值,我们可以去掉一个而不改变答案(这个很好 ...
- kafka 性能优化与常见问题优化处理方案
本文为博主原创,未经允许不得转载: 1. JVM参数优化设置 kafka是scala语言开发,运行在JVM上,需要对JVM参数合理设置,修改bin/kafka-start-server.sh中的jv ...
- 从零开发一款图片编辑器(使用html5+javascript)
最近开发了一个图片编辑器,类似于photoshop的网页版,源码参考自GitHub上,顺便也总结下使用html+js开发一个编辑器需要用到哪些知识点. 预览地址: https://ps.gitapp. ...
- Oracle12c新增max_idle_time参数的学习与感触
Oracle12c新增max_idle_time参数的学习与感触 TLDR 其实任何软件出了新版本.readme 是很重要的. 尤其是数据库, 涉及到底层问题的. 比如这次遇到的Oracle的max_ ...
- tiup 工具离线安装与简单导出数据说明
tiup 工具离线安装说明 mirror的创建 能上网的机器上面进行如下操作: curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pi ...
- [转帖]Jmeter中线程组和setUP线程组、tearDown线程组的区别
JMETER: setUP线程组:在测试任务ThreadGroup 运行前先被运行.通常用在运行测试任务前,做初始化工作.例如建立数据库连接初始分化工作.用户登录 tearDown线程组:在测试任务线 ...
- 【转帖】ESXi 6.x 安装storcli监控raid卡状态
https://b2b.baidu.com/land?id=744541c6188f7937d6dc97d6fb9142ff10 脚本宝典收集整理的这篇文章主要介绍了ESXi 6.x 安装storcl ...
- [转帖]ChatGPT研究框架(2023)
https://www.eet-china.com/mp/a226595.html ChatGPT是基于OpenAI公司开发的InstructGPT模型的对话系统,GPT系列模型源自2017年诞生的T ...
- [转帖]iptables开放指定端口
https://www.jianshu.com/p/5b44dd20484c 由于业务的需要, MySQL,Redis,mongodb等应用的端口需要我们手动操作开启 下面以 MySQL 为例,开启 ...