参考资料:
[1]牛客000001号的回答以及评论(方法巧妙,只能记住来用):
https://www.nowcoder.com/profile/2578911/codeBookDetail?submissionId=14316753
思路:
先整体翻转,再对每个单词进行各自翻转,遇到空格或遇到'\0'翻转一下就行。
关键词:
注意:
如果就一个单词,"Wonderful",你的思路是有问题的。
遇到一个空格算一个,要先增加一个空格。
自己的解答:
class Solution {
public:
string ReverseSentence(string str) {
//代码的思路是:首先进行部分翻转,再进行全部翻转
if(str.empty())
return str;
int nLen = str.size();
str+=' ';
int mark = 0;
//1.首先进行部分翻转
for(int i=0;i<(nLen+1);i++)
{
if(str[i] == ' ')
{
ReverseWord(str,mark,i-1);
mark=i+1;
}
}
//2.在进行全部翻转
str= str.substr(0,nLen);
ReverseWord(str,0,nLen-1);
return str;
}
void ReverseWord(string& str,int l,int r)
{
while(l<r)
{
swap(str[l],str[r]);
l++;
r--;
}
}
};