题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
这道题其实是字符串向左循环左移变型题, 本题最繁琐的地方就是要处理空格, 首先分别翻转空格之间的单词,最后再对整个字符串进行翻转。细节见代码:
class Solution {
public:
void swap(string &str, int left, int right)
{
while (left < right)
{
char t = str[left];
str[left] = str[right];
str[right] = t;
left++;
right--;
}
}
string ReverseSentence(string str) {
int low = 0;
int high = 0;
int s = 0;
while (s < int(str.length()))
{
while (str[s] == ' ')
{
s++;
}
low = s;
high = low;
while (high < int(str.length()) - 1)
{
if (str[high] != ' ')
{
high++;
}
else
{
high--;
break;
}
}
swap(str, low, high);
s = high + 1;
}
swap(str, 0, str.size()-1);
return str;
}
};