Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
反转字符串中的单词 III
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
-
<= s.length <= s包含可打印的ASCII字符。s不包含任何开头或结尾空格。s里 至少 有一个词。s中的所有单词都用一个空格隔开。
思路分析
方法一
- 我们都是站在巨人的肩膀上看世界,因此每个算法想到的第一解法都是使用字符串以及数组现有的 API;
- 现将字符串
s按照' '拆分成words数组; - 遍历数组,将数组每项按照
''拆分成数组后进行reverse,然后join(''),即可合并成每个单词都倒序的数组; join(' ')后即为需要返回的字符串。
方法二
- 遍历数组,找到为
' '的位置; - 将
' '之前的元素都倒序放在结果数组res中,若当前位置为' ',则将' '也放入数组中; join('')后即为需要返回的字符串。
AC 代码
方法一
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
const words = s.split(' ')
return words.map(item => item.split('').reverse().join('')).join(' ')
};
结果:
- 执行结果: 通过
- 执行用时:88 ms, 在所有 JavaScript 提交中击败了26.89%的用户
- 内存消耗:47.1 MB, 在所有 JavaScript 提交中击败了48.91%的用户
- 通过测试用例:29 / 29
方法二
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
const res = [];
const len = s.length;
let i = 0;
while (i < len) {
let start = i;
while (i < len && s.charAt(i) != ' ') {
i++;
}
for (let j = start; j < i; j++) {
res.push(s.charAt(start + i - 1 - j));
}
while (i < len && s.charAt(i) == ' ') {
i++;
res.push(' ');
}
}
return res.join('');
};
结果:
- 执行结果: 通过
- 执行用时:68 ms, 在所有 JavaScript 提交中击败了90.75%的用户
- 内存消耗:49.2 MB, 在所有 JavaScript 提交中击败了10.50%的用户
- 通过测试用例:29 / 29