每日算法:翻轉(zhuǎn)字符串里的單詞
回復(fù)交流,加入前端編程面試算法每日一題群
給定一個(gè)字符串,逐個(gè)翻轉(zhuǎn)字符串中的每個(gè)單詞。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
示例 3:
輸入: "a good example"
輸出: "example good a"
解釋: 如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。
說(shuō)明:
無(wú)空格字符構(gòu)成一個(gè)單詞。 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。 如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。
解法一:正則 + JS API
var reverseWords = function(s) {
return s.trim().replace(/\s+/g, ' ').split(' ').reverse().join(' ')
};
解法二:雙端隊(duì)列(不使用 API)
雙端隊(duì)列,故名思義就是兩端都可以進(jìn)隊(duì)的隊(duì)列
解題思路:
首先去除字符串左右空格 逐個(gè)讀取字符串中的每個(gè)單詞,依次放入雙端隊(duì)列的對(duì)頭 再將隊(duì)列轉(zhuǎn)換成字符串輸出(已空格為分隔符)
畫圖理解:



代碼實(shí)現(xiàn):
var reverseWords = function(s) {
let left = 0
let right = s.length - 1
let queue = []
let word = ''
while (s.charAt(left) === ' ') left ++
while (s.charAt(right) === ' ') right --
while (left <= right) {
let char = s.charAt(left)
if (char === ' ' && word) {
queue.unshift(word)
word = ''
} else if (char !== ' '){
word += char
}
left++
}
queue.unshift(word)
return queue.join(' ')
};最后
號(hào)內(nèi)回復(fù):
120 套模版評(píng)論
圖片
表情
