题目描述
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = “Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”
示例 2:
输入: s = “God Ding”
输出:“doG gniD”
代码片
/*
* @lc app=leetcode.cn id=557 lang=javascript
*
* [557] 反转字符串中的单词 III
* 解题思路:
* 循环的时候记录单词的首位置,把单词的末位置和首位置的内容反转加入
再把单词与单词中间的空格加入
最后拼接即可
时间复杂度:O(N)其中 N 为字符串的长度,空间复杂度也为O(N)
备注:其实还有不需要额外空间复杂度的,只是js中字符串是不可变类型。思路是从前往后遍历的时候,一个指针指向单词首字母,一个指针指向单词末字母,双指针交换对应内容
*/
// @lc code=start
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let i = 0;
let result = [];
let len = s.length;
while(i < len) {
//记录单词的首位置
let start = i;
//找到单词右边的空格
while (s[i] != " " && i < len) i++;
//从单词右边到左边加入结果集中 起到了反转效果
for (let j = i - 1; j >= start; j--) {
result.push(s[j]);
}
//单词与单词间的空格依次加入
while (s[i] == " " && i < len) {
result.push(s[i++]);
}
}
return result.join("");
};
// @lc code=end