壹 ❀ 引

又到了快乐的leetcode算法时间,今天的题目特别特别简单,来自leetcode557. 反转字符串中的单词 III,题目描述如下:

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"

注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

那么我们简单分析题目,说说如何解决这道简单的题目。

贰 ❀ 解题思路

JS leetcode 翻转字符串里的单词 题解分析一文中,我们已经做类似翻转字符的题目,然而这题其实更简单一点,题目已明确指出每个单词由单个空格分隔,所以我们完全可以利用split(" ")进行切割,再对每个单词进行切割翻转之后,还原成最初的字符,直接上代码:

/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
return s.split(" ").map(item => {
return item.split("").reverse().join("");
}).join(" ");
};

s.split(" ")将字符按空格进行切分,得到一个包含多个单词的数组。

map()方法对每个单词进行加工,再次split("")切割,并利用reverse()反转数组,之后利用join("")还原成字符反转的单词,注意,map返回一个新数组。

最后对新数组使用join(" ")方法将其还原成最初的字符串,只是此时每个单词的字母已反转,就是这么简单。

叁 ❀ 不用遍历的更佳做法

当然,在逛了评论区一圈后,发现不少用户指出使用map遍历过于耗时,那么有没有更好的做法呢,这里引用用户Luke Hu的题解:

/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
return s.split('').reverse().join('').split(" ").reverse().join(' ');
};

按照我前面的思路,比如hello world,我是将字符长句按空格拆成两个完整的单词,再分别对单词进行处理(2个单词遍历2次),完成后再组成长句。

而这个思路在于,一开始把整个长句拆成一个个字母。比如hello world直接拆成:

["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

之后进行反转,得到数组再还原成长句"!dlrow olleh",而根据我们前面的分析,我们想要的答案其实是"olleh !dlrow",所以这里再对"!dlrow olleh"按空格切割,再次反转,并还原成我们最终想要的答案,全程都是使用API,没有任何遍历,也是厉害。

那么关于本题就分析到这里。

JS leetcode 反转字符串中的单词 III 题解分析的更多相关文章

  1. C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  2. [Leetcode]反转字符串中的单词 III

    题目 代码 class Solution { public: string reverseWords(string s) { for(int i=0,j=0;j<=s.size();j++) { ...

  3. Leetcode#557. Reverse Words in a String III(反转字符串中的单词 III)

    题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输 ...

  4. Leetcode 557.反转字符串中的单词III

    反转字符串中的单词III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest ...

  5. Java实现 LeetCode 557 反转字符串中的单词 III(StringBuilder的翻转和分割)

    557. 反转字符串中的单词 III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode c ...

  6. LeetCode557 反转字符串中的单词 III

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: &q ...

  7. Leetcode 557. 反转字符串中的单词 III

    1.题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" ...

  8. LeetCode 557:反转字符串中的单词 III Reverse Words in a String III

    公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. Given a string, you need to reve ...

  9. [Swift]LeetCode557. 反转字符串中的单词 III | Reverse Words in a String III

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  10. 557. 反转字符串中的单词 III

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: &q ...

随机推荐

  1. java基础(3)--pulic class与class的区别

    1.一个类前面的public是可有可无的2.如果一个类使用 public 修饰,则文件名必须与类名一致3.如果一个类前面没有使用public修饰,则文件名可以与类名不一致.当编译成功后会生成对应类名的 ...

  2. 在线视频点播网站(python实现)

    本文将会对该项目进行一个简单的介绍,包括项目名称.项目背景.项目功能.技术栈等等. 项目名称 在线视频点播网站开发(python+django) 项目背景 学习完毕python和django之后,想找 ...

  3. 【转帖】BGP:全穿透,半穿透,静态代播有什么区别

    一. 什么是BGP二. 具体实现方案2.1BGP的优点2.2 真伪BGP在使用效果上有什么差异​​​​​​​​​​​​​​2.2.1 真BGP实现了用户最佳路径的自动选择​​​​​​​​​​​​​​​ ...

  4. [转帖]CPU结构对Redis性能的影响

    文章系转载,便于分类和归纳,源文地址:https://wangkai.blog.csdn.net/article/details/111571446 CPU的多核架构和多CPU架构都会影响到Redis ...

  5. [转帖] Linux文本命令技巧(下)

    https://www.cnblogs.com/codelogs/p/16060108.html 简介# 前一篇介绍了Linux中一些基本的文本命令与使用技巧,但是结合场景过少,本篇结合工作中一些常见 ...

  6. selenium四种截图方式

    1.get_screenshot_as_file() from selenium import webdriver driver = webdriver.Chrome() driver.get(&qu ...

  7. 全球 IPv4 耗尽,下个月开始收费!

    哈喽大家好,我是咸鱼 IPv4(Internet Protocol version 4)是互联网上使用最广泛的网络层协议之一,于1981年在 RFC 791 中发布,它定义了 32 位的IP地址结构和 ...

  8. 【代码片段】makefile 中通过 shell 函数执行 sed

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 先上代码:(在 macos 上调试通过) # define ...

  9. Vue双向数据绑定原理-上

    Vue响应式的原理(数据改变界面就会改变)是什么? 时时监听数据变化, 一旦数据发生变化就更新界面, 这就是Vue响应式的原理. Vue是如何实现时时监听数据变化的 通过原生JS的defineProp ...

  10. 语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引

    语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引 目标:使用 Milvus 搭建召回系统,然后使用训练好的语义索引模型,抽取向量,插入到 Milvus 中,然后进行检索. 语义搜 ...