题目描述 - 反转字符串中的单词
给定一个字符串 s
,反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意: 输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例:
- 输入:
s = "the sky is blue"
,输出:blue is sky the
- 输入:
s = " hello world "
,输出:world hello
- 输入:
s = "a good example"
,输出:example good a
思路分析
首先要去除首尾两端的空格, 对于字符串中间的空格也要进行判断。
- 利用js语言自带的字符串、数组API,实现。 代码实现:
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
return s.split(' ').filter(item => item).reverse().join(' ');
};
- 遍历字符串,逐个反转. 采用双指针,left指针初始在0号位置,right指针初始在s.length - 1位置,遍历字符串,将每个由空格分隔的字符串加入队列,最后再转回字符串。 代码实现:
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let left = 0, right = s.length-1;
//word 暂存字符 直至拼成完整单词; qune 为结果数组
let word = "", qune = [];
// 去除左右两边空格
while(s.charAt(left) === " ") left ++;
while(s.charAt(right) === " ") right --;
while(left <= right){
let char = s[left];
if(char=== " " && word){
qune.unshift(word)
word = ""
}else if(char !== " "){
// 拼接字符得到单词
word += char
}
left++
}
// 最后一个单词也要插入队列
qune.unshift(word)
return qune.join(" ")
};