1. 题目描述

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

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

2. 思路分析

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

3. 代码实现

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* @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.'))