2021-01-04 | 151. 翻轉字串裡的單詞
阿新 • • 發佈:2021-01-05
技術標籤:2021 LeetCode每日一題字串leetcodeJavaScript
1. 題目描述
給定一個字串,逐個翻轉字串中的每個單詞。
說明:
- 無空格字元構成一個 單詞 。
- 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
- 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
示例 1:
輸入:"the sky is blue"
輸出:"blue is sky the"
示例 2:
輸入:" hello world! " 輸出:"world! hello" 解釋:輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
示例 3:
輸入:"a good example"
輸出:"example good a"
解釋:如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
示例 4:
輸入:s = " Bob Loves Alice "
輸出:"Alice Loves Bob"
示例 5:
輸入:s = "Alice does not even like bob"
輸出:"bob like even not does Alice"
提示:
- 1 <= s.length <= 104
- s 包含英文大小寫字母、數字和空格 ’ ’
- s 中 至少存在一個 單詞
進階:
- 請嘗試使用 O(1) 額外空間複雜度的原地解法。
2. 解題思路
(1)使用JavaScript的API
對於這道題,我們可以直接使用JavaScript的API來完成這道題目:
- 使用
split()
來將字串中每個單詞分隔,放在一個數組中 - 使用
filter()
來將多餘的空格過濾掉 - 使用
reverse()
來反轉陣列元素 - 使用
join()
將陣列元素拼接為字串
複雜度分析
-
時間複雜度:O(N),其中 N 為輸入字串的長度。
-
空間複雜度:O(N),用來儲存字串分割之後的結果。
(2)陣列操作
除了上述的方法之外,我們還可以用最普通的方法處理這個字串:
- 首先將字串首尾UI的空格去除掉
- 遍歷字串,將字串中單詞逐個遍歷出來,放在一個數組中
- 將陣列中的元素合併成一個字串
複雜度分析
-
時間複雜度:O(N),其中 N 為輸入字串的長度。
-
空間複雜度:O(N),其中N為遍歷期間儲存的陣列的長度。
3. 程式碼實現
(1)使用JavaScript的API
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
return s.split(' ').filter(item => item).reverse().join(' ')
};
(2)單詞逐個處理
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let res = [], temp = [], cur = 0, str = s.trim(), len = str.length
while(cur < len){
while(cur < len && str.charAt(cur) !== ' '){
temp.push(str.charAt(cur))
cur++
}
if(temp.length){
res.unshift(temp.join(''))
temp = []
}
while(cur < len && str.charAt(cur) === ' '){
cur++
}
}
return res.join(' ')
};
4. 提交結果
(1)使用JavaScript的API
(2)單詞逐個處理