题目描述
解法一:(Python)
class Solution:
def reverseWords(self, s: str) -> str:
return " ".join(reversed(s.split()))
解法二:双端队列(C++)
复杂度分析
时间复杂度: O ( N ) O(N) O(N),其中 N N N 为输入字符串的长度。
空间复杂度: O ( N ) O(N) O(N),双端队列存储单词需要 O ( N ) O(N) O(N) 的空间。
class Solution {
public:
string reverseWords(string s) {
int left = 0, right = (int)s.size()-1;
// 去掉字符串开头的空白字符
while(left<=right && s[left]==' ') left++;
// 去掉字符串尾部的空白字符
while(left<=right && s[right]==' ') right--;
deque<string> dq;
string word;
while(left<=right)
{
char c = s[left];
if(word.size() && c==' ')
{
// 将单词push到队列的头部
dq.push_front(move(word));
word = "";
}
else if(c!=' ')
{
word += c;
}
left++;
}
dq.push_front(move(word));
string ans;
while(!dq.empty())
{
ans += dq.front();
dq.pop_front();
if(!dq.empty()) ans += ' ';
}
return ans;
}
};