题目描述
牛客最近来了一个新员工 F i s h Fish Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事 C a t Cat Cat对 F i s h Fish Fish写的内容颇感兴趣,有一天他向 F i s h Fish Fish借来翻看,但却读不懂它的意思。例如,“ s t u d e n t . student. student. a a a a m am am I I I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“ I I I a m am am a a a s t u d e n t . student. student.”。 C a t Cat Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:类似于旋转字符串。分为两步操作,第一步为翻转整个字符串,第二步为对翻转后的字符串中的每个单词逐一进行翻转
class Solution {
public:
string ReverseSentence(string str) {
if (str.empty())
return string();
int length = str.size();
int start = 0;
int end = 0;
//首先整体翻转
Reverse(str, 0, length - 1);
//逐个单词翻转
while (str[start] != '\0') {
if (str[start] == ' ') {
start++;
end++;
} else if (str[end] == ' ' || str[end] == '\0') {
Reverse(str, start, end - 1);
start = end;
} else {
end++;
}
}
return str;
}
void Reverse(string &str, int start, int end) {
if (str.empty())
return;
for (int i = start, j = end; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
};