一、题目:
557.反转字符串中的单词III:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
二、思路:
遍历字符串,找到第一个空格,反转第一个字符到第一个空格之间的字符,退出遍历。遍历字符串,找到每个单词前面的空格;反转该空格到下一个空格之间的字符。(额外考虑不存在空格和最后一个单词的情况)
三、代码(C++):
string reverseWords(string s) {
for(int i=0;i!=s.size();i++)
{
if(s[i]==' ')
{
reverse(s.begin(),s.begin()+i); //反转第一个单词
break;
}
if(i==s.size()-1) //考虑没有空格的特殊情况
reverse(s.begin(),s.end());
}
for(int i=0;i!=s.size();i++)
{
if(s[i]==' '&&s[i+1]!=' ')
{
for(int j=i+1;j!=s.size();j++)
{
if(s[j]==' ')
{
reverse(s.begin()+i+1,s.begin()+j); //反转空格之间的单词
break;
}
if(j==s.size()-1)
reverse(s.begin()+i+1,s.end()); //考虑最后一个单词的特殊情况
}
}
}
return s;
}