今天做leetcode的第557题-反转字符串中的单词 |||。按照惯例,先上题目:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
题目已经把要求表达的很清楚了。那么就直接开始做题,大概思路就是先按照空格把字符串给分割成一个数组,然后再对数组内的字符串进行反转。上代码:
var reverseWords = function(s) {
const arr = s.split(' ')
for (let i = 0; i < arr.length; i++) {
arr[i] = helper(arr[i])
}
return arr.join(' ')
};
function helper (str) {
let s = ''
for (let i = str.length - 1; i >= 0; i--) {
s += str[i]
}
return s
}
这道题做起来,思路还是挺清晰的。不过还可以换一种写法来解决,利用ES6的语法。
var reverseWords = function(s) {
return s.split(' ').map(item=>{
return Array.from(item).reverse().join('')
}).join(' ')
};
这种写法就比较简洁一点,只有三行代码。不过大致思路是一样的,都是先拆分成数组,再对数组内的字符串进行反转,然后再拼接起来。
还有第三种解法,只需要一层for循环就可以了。
var reverseWords = function(s) {
let longRes = ''
let shortRes = ''
for (let i = 0; i < s.length; i++) {
if (s[i] !== ' ') {
shortRes = s[i] + shortRes
} else {
longRes = longRes ? longRes + ' ' + shortRes : shortRes
shortRes = ''
}
if (i == s.length - 1) {
longRes = longRes ? longRes + ' ' + shortRes : shortRes
}
}
return longRes
};
大概思路就是用两个变量来存储字符串,longRes存储整体结果,shortRes存储单词的反转结果。最后输出longRes即可。
今天内容就到这,虽然题目比较简单,但可以尝试从多个方向去解答。