zoukankan      html  css  js  c++  java
  • JS leetcode 翻转字符串里的单词 题解分析

    壹 ❀ 引

    今天来做一道难度中等,但实际难度并不是很高的题目,题目来源leetcode151. 翻转字符串里的单词,题目描述如下:

    给定一个字符串,逐个翻转字符串中的每个单词。

    示例 1:

    输入: "the sky is blue"
    输出: "blue is sky the"
    

    示例 2:

    输入: "  hello world!  "
    输出: "world! hello"
    解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    

    示例 3:

    输入: "a good   example"
    输出: "example good a"
    解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
    

    说明:

    • 无空格字符构成一个单词。
    • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    我先说说我的傻吊做法,再来分析优质的做法,那么本文开始。

    贰 ❀ 不太聪明的做法

    当我看到这题,我脑袋里第一想到的就是正则....对,用正则过滤掉字符首位空格,并将文字中多个空格转为一个,这样咱就可以利用split进行切割,reverse反转后,再利用join还原成字符串,说干就干(为此我还复习了一下正则...):

    /**
     * @param {string} s
     * @return {string}
     */
    var reverseWords = function(s) {
        return s.replace(/^s+|s+$/g, "").replace(/s{2,}/g, " ").split(" ").reverse().join(" ");
    };
    

    傻吊在哪呢,我先用s.replace(/^s+|s+$/g, "")去除了首位空格,之后又用replace(/s{2,}/g, " ")将可能存在的字符间多处空格转成一个,再按空格切分,反转,再次拼接。

    我之所以跟空格这么过不去,还是因为题目描述中有多处强调空格的地方,所以才出此下策。

    在查看别人思路的时候,我才想起来了有现成的trim()方法可用,所以可以这样:

    /**
     * @param {string} s
     * @return {string}
     */
    var reverseWords = function(s) {
        return s.trim().replace(/s{2,}/g, " ").split(" ").reverse().join(" ");
    };
    

    显得我像个憨憨....

    但事实上,我们根本不需要关注空格.....

    以," hello world! "为例,将它按照" "进行切割,可以得到一个包含字符与多个空格的数组:

    "  hello   world!  ".split(" ");//["", "", "hello", "", "", "world!", "", ""]
    

    我们完全可以遍历一遍,去除掉数组中所有空格,这样就得到了如下数组:

    ["hello","world!"]
    

    通过反转数组,再用join(" ")不就达到效果了。亏我纠结怎么加工空格想了半天,直接上代码:

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

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

  • 相关阅读:
    java web(七)Cookie的简单使用
    java web(六)多个请求对应一个Servlet
    <十六>JDBC_使用 DBUtils 编写通用的DAO
    <十五>JDBC_使用 DBUtils 进行更新、查询操作
    附加作业
    第五周作业
    第八周作业
    第七周作业
    第一周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/echolun/p/13033044.html
Copyright © 2011-2022 走看看