每日算法:翻轉(zhuǎn)字符串里的單詞
作者: sisterAn
輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。
給定一個(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)換成字符串輸出(已空格為分隔符)
畫(huà)圖理解:
代碼實(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(' ')
- };
責(zé)任編輯:武曉燕
來(lái)源:
三分鐘學(xué)前端