题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
考察点:字符串编程能力;库函数;
思路:先进行一次整体反转,再对每个字母进行单个反转。
class Solution{
public:
void reverse(string & str, int begin, int end)//反转字符串
{
if (str.empty())
return;
while (begin < end)
{
char temp = str[begin];
str[begin] = str[end];
str[end] = temp;
begin++;
end--;
}
}
string ReverseSentence(string str)
{
if (str.empty())
return "";
reverse(str, 0, str.length() - 1);//整体反转
int begin = 0;
int end = 0;
while (begin < str.length())
{
if (str[end] == ' ' || end == str.length())//末尾遇到' '后者已经到结尾,开始反转
{
reverse(str, begin, end - 1);
end++; //改变结尾下标
begin = end; //改变初始下标
}
else
end++;//碰到字母,结尾下标递增
}
return str;
}
};