zoukankan      html  css  js  c++  java
  • [LeetCode 557] 反转字符串中的单词 III

    题目:

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

    示例 1:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解答:

      1.解题思路:

      • 题目是按单词反转的,而且需要保留空格和单词初始顺序,说明可以通过空格划分的方式形成数组split
      • 然后遍历数组的每个元素,反转再转换为字符串 
    var reverseWords = function(s) {
        let arr = s.split(' ')
        let result = arr.map(item => {
            return item.split('').reverse().join('')
        })
        return result.join(' ')
    };

       2.解题思路:

      • 可以看到第一种解法的结果并不快而且写得很冗余,多了arr和result两个变量 
    var reverseWords = function(s) {
        return s.split(' ').map(item => {
            return item.split('').reverse().join('')
        }).join(' ')
    };

       3.解题思路:

      • 然而还是能看出来仍然有提升空间
      • 看到了题解里有个小伙伴不用map方法,少了遍历速度大大提升

        

    var reverseWords = function(s) {
        let arr=s.split("").reverse().join("")
        return arr.split(" ").reverse().join(" ")
    };

      4.解题思路:

      • 除了使用split方法,还可以使用match,通过正则去匹配
      • /[w']+/g :"g"代表全局,"[w']"中括号是可选项,"w"是识别单词(因为题目中有 " ' ",所以需要加上“ ' ”),"+"代表一次或多次
      • 此外split(' ')其实等价于用正则表示split(/s/g)  "s"是转移符号用以匹配任何空白字符,包括空格、制表符、换页符等等   
    var reverseWords = function(s) {
      return s.match(/[w']+/g).map(item => {
          return item.split('').reverse().join('')
      }).join(' ')
    };

         

         

  • 相关阅读:
    第二阶段冲刺报告(三)
    第二阶段冲刺报告(二)
    第二阶段冲刺报告(一)
    课程改进意见
    用户体验
    返回一个二维整数数组中最大联通子数组的和
    《你的灯亮着吗》阅读笔记三 ——谁的问题
    《你的灯亮着吗》阅读笔记二 ——什么是真正的问题
    《你的灯亮着吗》阅读笔记一 —— 问题是什么?
    我爱淘冲刺阶段站立会议2每天任务6
  • 原文地址:https://www.cnblogs.com/TTblog5/p/12562194.html
Copyright © 2011-2022 走看看