此题先对每一个单词进行逆置,然后再整体逆置。
类似此题。
题解
class Solution {
public:
void _reverse(string& str, int start, int end)
{
// [start, end)
int i = start, j = end-1;
while(i < j)
{
swap(str[i], str[j]);
++i;
--j;
}
}
string ReverseSentence(string str) {
if(str.empty())
return str;
// 1. 每个子串进行逆置
int i = 0, j = 0;
while(i < str.size() && j < str.size())
{
// 找到第一个非空格字母
while(i < str.size() && str[i] == ' ')
++i;
// 找到字母结尾处,即第一个空格
j = i+1;
while(j < str.size() && str[j] != ' ')
++j;
// 对字符串进行局部逆置
_reverse(str, i, j);
// j此时是空格
i = j+1;
}
// 2. 整体逆置
_reverse(str, 0, str.size());
return str;
}
};