题目:
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
这道题可以这么做,先将整个字符串进行翻转,然后将每一个单词进行翻转,就可以得到正确的顺序。
class Solution {
public:
string ReverseSentence(string str) {
if(str.length() == 0)
return "";
if(str.length() == 1)
return str;
Rerverse(str, 0, str.length()-1);//整体翻转
int i=0;
int j=0;
int left = 0;
int right = 0;
while(i<str.length()){
while(i<str.length()&& str[i]==' '){//遇到空格跳过
i++;
}
left = i;//记录下一个翻转字符串的首位置
right = i;//记录下一个翻转字符串的末尾位置
while(i<str.length() && str[i]!=' '){//遇到非空格继续往后走
i++;
right++;
}
Rerverse(str, left, right-1);//局部翻转单词
}
return str;
}
void Rerverse(string& str, int left, int right)//翻转字符串
{
while(left < right){
swap(str[left++], str[right--]);
}
}
};