大师兄

1. 题目描述

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。

2. 思路分析

进行 2 次不同层次的翻转。第一个层次的翻转,是对整体字符串进行翻转。第二个层次的翻转,是对翻转后字符串中的单词进行翻转。

3. 代码实现

注意:因为 js 按位重写字符,所以第一次整体字符串翻转后的每个字符,都放入了数组中。

/**
* @param {String} sentence
*/
function reverseSentence(sentence) {
// 第一次翻转:每个字符
const chars = sentence.split("").reverse();
let result = "",
last = []; // 保存上一个空格到当前空格之间的所有字符
chars.forEach(ch => {
// 遇到空格,说明之前的字符组成了单词
// 进行第二次翻转:单词
if (ch === " ") {
result += last.reverse().join("");
last.length = 0; // 清空上一个单词
}
last.push(ch);
});
result += last.reverse().join("");
return result;
}
/**
* 测试代码,输出:
* student.a am I
*/
console.log(reverseSentence("I am a student."));