[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(' ')
};

 

 

 

     

     

posted @ 2020-03-24 21:28  TTtttt5  阅读(175)  评论(0编辑  收藏  举报