题目:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 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(' ') };