指针从后向前遍历
- 指针从后向前遍历,遇到单词时记录单词长度
- 单词结束时,将单词添加到res中
- 注意:除了第一个单词,其余每个单词都要在头部加一个空格
class Solution {
public:
string reverseWords(string s) {
int len = s.size();
string res = "";
int index = len;
int word_len = 0;
while(index>=0)
{
if(index==0 || s[index-1] == ' ')
{
if(word_len)
{
if(res.size()!=0)
res+=' ';
for(int i=0; i<word_len; i++)
{
res += s[index+i];
}
}
word_len = 0;
}
else
{
word_len++;
}
index--;
}
return res;
}
};
使用双端队列存储遍历到的单词
class Solution {
public:
string reverseWords(string s) {
int left = 0;
int right = s.size()-1;
while(s[left]==' ') left++;
while(s[right]==' ') right--;
deque<string> mydeque;
string res = "";
string tmp = "";
while(left<=right)
{
char c = s[left++];
if(c!=' ')
{
tmp+=c;
}
else if(tmp.size() != 0)
{
mydeque.push_front(move(tmp));
tmp = "";
}
}
mydeque.push_front(std::move(tmp));
while(!mydeque.empty())
{
res += mydeque.front();
mydeque.pop_front();
if(!mydeque.empty())
res += ' ';
}
return res;
}
};