题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
算法思想:先翻转整个句子,然后,依次翻转每个单词。依据空格来确定单词的起始和终止位置
class Solution {
public:
void reverseStr(string &str,int start,int end){
int i=start,j=end;
while(i<j){
char tmp ;
tmp = str[j];
str[j] = str[i];
str[i] = tmp;
i++;
j--;
}
}
string ReverseSentence(string str) {
int len = str.size();
reverseStr(str,0,len-1); //整体反转
int preBlank=-1;
for(int cur=0;cur<len;cur++){
if(cur==len-1)//最后一个单词单独反转
reverseStr(str,preBlank+1,cur);
if(str[cur]==' ')
{
reverseStr(str,preBlank+1,cur-1);
preBlank = cur; //将当前空格记录为上一个空格
}
}
return str;
}
};