思路:这题的思路跟剑指里的另一道很像,我们只要先反转每个单词的,再整体翻转即得到结果。
class Solution {
public:
string ReverseSentence(string str) {
vector<int> v_end;
for(int i=0;i<str.size();i++) //记录空格的位置
{
if(str[i]==' ')
v_end.push_back(i);
}
int begin = 0; //起点
for(int i=0;i<v_end.size();i++)
{
swap_str(str, begin, v_end[i]-1); //单词起点到终点
begin = v_end[i]+1;
}
swap_str(str, begin, str.size()-1);//最后一部分的单词
swap_str(str, 0, str.size()-1);//整体反转
return str;
}
void swap_str(string &str, int begin, int end)
{
while(begin<end)
{
swap(str[begin],str[end]);
begin++;
end--;
}
}
};