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