原创博文,转载请注明出处!
# 题目
# 思路
两次翻转,首先整个句子翻转,然后单词翻转。
# 代码
class Solution {
public:
string ReverseSentence(string str)
{
// 特殊输入
int len=str.length();
if(len==0) return "";
// 翻转句子
Reverse(str,0,len-1);
// 翻转单词
int i=0;//辅助变量(单词的第一个字母的索引)
int j=0;//辅助变量(单词的最后一个字母的索引的下一个索引)
while(i<len)
{
if(str[i]==' ')
{
i++;
j++;
}
if(str[j]!=' ' && str[j]!='\0')
{
++j;
}
else
{
Reverse(str,i,--j);
i=++j;
}
}
return str;
}
// 翻转
void Reverse(string &str,int pstart,int pend)
{
while(pstart < pend)
{
char temp=str[pstart];
str[pstart]=str[pend];
str[pend]=temp;
pstart++;
pend--;
}
}
};