题目链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/description/
题目:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
此题也是在344题的基础上增加了一 点条件,反转每个单词,所以空格就是判断条件,遇到空格就进行一次反转。由于两种方法不是同一个时间点写的,所以变量名有点区别
C 代码:
void reserve(char* start,char* end)
{
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
char* reverseWords(char* s)
{
char* pt = s;
char* tr = s;
while (*tr)
{
if (*tr == ' ')
{
tr++;
pt = tr;
}
while((*tr) && *tr != ' ')
tr++;
reserve(pt,tr-1);
}
return s;
}
C++代码:
class Solution {
public:
string reverseWords(string s) {
string::iterator left = s.begin();
string::iterator right = s.begin();
for ( ; right < s.end(); right++)
{
if (*right == ' '){
reverse(left,right);
left = right+1;
}
}
reverse(left,right); //最后一个单词反转
return s;
}
};
谢谢。